我有個問題。我有一個list,而這又包含dicts. 問題是dicts罐子有不同的尺寸。某些元素中缺少某些元素dicts。dicts是否可以選擇用缺少的屬性填充?這只是填充的問題,keys并且可以簡單地用 填充值None。
下面的例子
[
{'_id': 'orders/213123',
'contactEditor': {'name': 'Max Power',
'phone': '1234567'},
'isCompleteDelivery': False,
},
{'_id': 'orders/2173823',
'contactEditor': {'name': 'Michael'},
},
]
事實證明,第一個元素擁有最多keys,而第二個元素缺少以下keys phoneand isCompleteDelivery。
這是填寫的,看起來像這樣
[
{'_id': 'orders/213123',
'contactEditor': {'name': 'Max Power',
'phone': '1234567'},
'isCompleteDelivery': False,
},
{'_id': 'orders/2173823',
'contactEditor': {'name': 'Michael',
'phone': None},
'isCompleteDelivery': None,
},
]
這給了我dict最多的元素和數量。
%%time
highest_element = 0
elements = 0
for i, element in enumerate(myList):
counted = count(myList[i])
if(counted > elements):
elements = counted
highest_element = i
print(str(elements) " " str(highest_element))
myList = [
{'_id': 'orders/213123',
'contactEditor': {'name': 'Max Power',
'phone': '1234567',
'email': '[email protected]'},
'contactSoldToParty': {'name': 'Max Not',
'phone': '123456789',
'email': '[email protected]'},
'isCompleteDelivery': False,
'metaData': {'dataOriginSystem': 'Goods',
'dataOriginWasCreatedTime': '10:12:12',},
'orderDate': '2021-02-22',
'orderDateBuyer': '2021-02-22',
},
{'_id': 'orders/12323',
'contactEditor': {'name': 'Max Power2',
'phone': '1234567',
'email': '[email protected]'},
'contactSoldToParty': {'name': 'Max Not',
'phone': '123456789',
'email': '[email protected]'},
'isCompleteDelivery': False,
'metaData': {'dataOriginSystem': 'Goods',
'dataOriginWasCreatedTime': '10:12:12',},
},
{'_id': 'orders/12323',
'contactEditor': {'name': 'Max Power2',
'phone': '1234567',
'email': '[email protected]'},
'contactSoldToParty': {'name': 'Max Not',
'phone': '123456789',
'email': '[email protected]'},
'orderDate': '2021-02-22',
'orderDateBuyer': '2021-02-22',
},
{'_id': 'orders/12323',
'contactEditor': {'name': 'Max Power2',
'phone': '1234567',
'email': '[email protected]'},
'contactSoldToParty': {'name': 'Max Not',},
'isCompleteDelivery': False,
},
]
uj5u.com熱心網友回復:
如果我正確理解了這個問題,您似乎需要構建所有可能鍵的超集。一旦你有了它,你就可以遍歷串列并在每個字典中設定默認值。現在已經調整了“頂級”字典,您需要降低一個級別并對嵌套字典執行相同的操作。此代碼僅限于問題中所示的資料結構。
list_ = [
{'_id': 'orders/213123',
'contactEditor': {'name': 'Max Power',
'phone': '1234567'},
'isCompleteDelivery': False,
},
{'_id': 'orders/2173823',
'contactEditor': {'name': 'Michael'},
}
]
def modkv(L, K):
superset_ = set(key for dict_ in list_ for key in dict_[K])
for dict_ in L:
for key in superset_:
dict_[K].setdefault(key, None)
superset = set(key for dict_ in list_ for key in dict_)
for dict_ in list_:
for key in superset:
dict_.setdefault(key, None)
for dict_ in list_:
for k, v in dict_.items():
if isinstance(v, dict):
modkv(list_, k)
print(list_)
輸出:
[{'_id': 'orders/213123', 'contactEditor': {'name': 'Max Power', 'phone': '1234567'}, 'isCompleteDelivery': False}, {'_id': 'orders/2173823', 'contactEditor': {'name': 'Michael', 'phone': None}, 'isCompleteDelivery': None}]
uj5u.com熱心網友回復:
如果字典中不存在帶有 value 的代碼,則此代碼會生成一個鍵None。
lst = [
{'_id': 'orders/213123',
'contactEditor': {'name': 'Max Power',
'phone': '1234567'},
'isCompleteDelivery': False,
},
{'_id': 'orders/2173823',
'contactEditor': {'name': 'Michael'},
},
]
complete_dict = {'_id': None,
'contactEditor': {'name': None,
'phone': None},
'isCompleteDelivery': None,
}
# here complete dictionary means which is contain all possible keys.
all_keys = complete_dict.keys()
for i,value in enumerate(lst):
for a in all_keys:
try:
value[a]
except KeyError:
value[a]=None
else:
v = value[a]
if isinstance(v,dict):
for a2 in complete_dict[a].keys():
try:
v[a2]
except KeyError:
v[a2]=None
value[a]=v
del lst[i]
lst.insert(i,value)
print(lst)
輸出
[{'_id': 'orders/213123',
'contactEditor': {'name': 'Max Power', 'phone': '1234567'},
'isCompleteDelivery': False},
{'_id': 'orders/2173823',
'contactEditor': {'name': 'Michael', 'phone': None},
'isCompleteDelivery': None}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/479568.html
上一篇:PandasGroupbyAgg:獲取串列列中出現次數最多的字串
下一篇:具有靜態內容和專案的畫布
