a =[{
"id":"1",
"Name":'BK',
"Age":'56'
},
{
"id":"1",
"Sex":'Male'
},
{
"id":"2",
"Name":"AK",
"Age":"32"
}]
我有一個字典串列,其中一個人資訊在多個字典中拆分為上面的前 id 1 的資訊包含在前 2 個字典中,我怎樣才能得到下面的輸出
{1: {'Name':'BK','Age':'56','Sex':'Male'}, 2: { 'Name': 'AK','Age':'32'}}
uj5u.com熱心網友回復:
您可以使用 defaultdict 來收集結果。
from collections import defaultdict
a =[{ "id":"1", "Name":'BK', "Age":'56' }, { "id":"1", "Sex":'Male' }, { "id":"2", "Name":"AK", "Age":"32" }]
results = defaultdict(dict)
key = lambda d: d['id']
for a_dict in a:
results[a_dict.pop('id')].update(a_dict)
這給了你:
>>> results
defaultdict(<class 'dict'>, {'1': {'Name': 'BK', 'Age': '56', 'Sex': 'Male'}, '2': {'Name': 'AK', 'Age': '32'}})
defaultdict 型別的行為與普通 dict 類似,不同之處在于當您參考未知值時,將回傳默認值。這意味著隨著字典a的迭代,值(除了id)會更新到現有字典或自動新創建的字典上。
collections.defaultdict 是如何作業的?
uj5u.com熱心網友回復:
使用defaultdict
from collections import defaultdict
a = [{
"id": "1",
"Name": 'BK',
"Age": '56'
},
{
"id": "1",
"Sex": 'Male'
},
{
"id": "2",
"Name": "AK",
"Age": "32"
}
]
final_ = defaultdict(dict)
for row in a:
final_[row.pop('id')].update(row)
print(final_)
defaultdict(<class 'dict'>, {'1': {'Name': 'BK', 'Age': '56', 'Sex': 'Male'}, '2': {'Name': 'AK', 'Age': '32'}})
uj5u.com熱心網友回復:
您可以使用 .update() 函陣列合 2 個字典
dict_a = { "id":"1", "Name":'BK', "Age":'56' }
dict_b = { "id":"1", "Sex":'Male' }
dict_a.update(dict_b) # {'Age': '56', 'Name': 'BK', 'Sex': 'Male', 'id': '1'}
由于您想要的輸出是字典形式
combined_dict = {}
for item in a:
id = item.pop("id") # pop() remove the id key from item and return the value
if id in combined_dict:
combined_dict[id].update(item)
else:
combined_dict[id] = item
print(combined_dict) # {'1': {'Name': 'BK', 'Age': '56', 'Sex': 'Male'}, '2': {'Name': 'AK', 'Age': '32'}}
uj5u.com熱心網友回復:
from collections import defaultdict
result = defaultdict(dict)
a =[{ "id":"1", "Name":'BK', "Age":'56' }, { "id":"1", "Sex":'Male' }, { "id":"2", "Name":"AK", "Age":"32" }]
for b in a:
result[b['id']].update(b)
print(result)
uj5u.com熱心網友回復:
d = {}
for p in a:
id = p["id"]
if id not in d.keys():
d[id] = p
else:
d[id] = {**d[id], **p}
d是你想要的結果字典。
在for回圈中,如果你第一次遇到一個id,你只是存盤不完整的值。
如果 id 在現有鍵中,請更新它。
組合發生在{**d[id], **p}
**在哪里打開字典。
它將與 id 和當前 dict 關聯的現有不完整 dict 解包,然后將它們組合成一個新 dict。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/447815.html
標籤:Python python-3.x 列表 字典
