将许多命令合并为一个

时间:2019-02-24 08:50:03

标签: python dictionary python-3.7

在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
    },
}

2 个答案:

答案 0 :(得分:2)

您需要循环并一次更新一个嵌套值:

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}}

答案 1 :(得分: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}}]
>>>