将许多字典合并为一个
Merge many dicts in one
在 Python 3.7.2 中,我有一个 for 循环的输出:
{'London': {'House': 1800.00}}
{'London': {'Farm': 2500.0}}
{'Rome': {'House': 1500.00}}
{'Rome': {'Farm': 3000.00}}
我想在最后一个循环中得到这个:
{ 'London':
{ 'House': 1800.00,
'Farm': 2500.00
},
'Rome':
{ 'House': 1500.00,
'Farm': 3000.00
},
}
我尝试了很多解决方案,如 .update() 等,但我没有找到正确的方法。
例如,此解决方案覆盖第一对键值(对于 .update() 方法):
dict(list(self.PRICE_LIST.items()) + list(price_location.items()))
{
"London": {
"Farm": 2500.00
},
"Rome": {
"Farm": 3000.00
},
}
您需要一个循环并一次更新一个嵌套值:
import collections
import pprint
dicts = [
{'London': {'House': 1800.00}},
{'London': {'Farm': 2500.0}},
{'Rome': {'House': 1500.00}},
{'Rome': {'Farm': 3000.00}},
]
merged = collections.defaultdict(dict)
for d in dicts:
for key, val in d.items():
merged[key].update(val)
pprint.pprint(dict(merged))
那么输出是这样的:
{'London': {'Farm': 2500.0, 'House': 1800.0},
'Rome': {'Farm': 3000.0, 'House': 1500.0}}
使用列表理解:
>>> [{list(dicts[i].keys())[0]:dict(list(dicts[i].values())[0].items()|list(dicts[i+1].values())[0].items())} for i in range(0,len(dicts),2)]
[{'London': {'House': 1800.0, 'Farm': 2500.0}}, {'Rome': {'Farm': 3000.0, 'House': 1500.0}}]
>>>
在 Python 3.7.2 中,我有一个 for 循环的输出:
{'London': {'House': 1800.00}}
{'London': {'Farm': 2500.0}}
{'Rome': {'House': 1500.00}}
{'Rome': {'Farm': 3000.00}}
我想在最后一个循环中得到这个:
{ 'London':
{ 'House': 1800.00,
'Farm': 2500.00
},
'Rome':
{ 'House': 1500.00,
'Farm': 3000.00
},
}
我尝试了很多解决方案,如 .update() 等,但我没有找到正确的方法。
例如,此解决方案覆盖第一对键值(对于 .update() 方法):
dict(list(self.PRICE_LIST.items()) + list(price_location.items()))
{
"London": {
"Farm": 2500.00
},
"Rome": {
"Farm": 3000.00
},
}
您需要一个循环并一次更新一个嵌套值:
import collections
import pprint
dicts = [
{'London': {'House': 1800.00}},
{'London': {'Farm': 2500.0}},
{'Rome': {'House': 1500.00}},
{'Rome': {'Farm': 3000.00}},
]
merged = collections.defaultdict(dict)
for d in dicts:
for key, val in d.items():
merged[key].update(val)
pprint.pprint(dict(merged))
那么输出是这样的:
{'London': {'Farm': 2500.0, 'House': 1800.0},
'Rome': {'Farm': 3000.0, 'House': 1500.0}}
使用列表理解:
>>> [{list(dicts[i].keys())[0]:dict(list(dicts[i].values())[0].items()|list(dicts[i+1].values())[0].items())} for i in range(0,len(dicts),2)]
[{'London': {'House': 1800.0, 'Farm': 2500.0}}, {'Rome': {'Farm': 3000.0, 'House': 1500.0}}]
>>>