在Python中合并不同列表中的词典

Ext*_*ria 4 python dictionary

我需要合并两个带有字典的列表:

dict1 = [{'Count': '307', 'name': 'Other', 'Percentage': '7.7%'}, {'Count': '7,813', 'name': 'Other', 'Percentage': '6.8%'}...]
dict2 = [{'Place': 'Home'}, {'Place':'Forest'},...]
Run Code Online (Sandbox Code Playgroud)

第一个列表中有56个元素(56个字典),第二个列表中有14个元素(dict2).我想要做的是将第一个元素从dict2插入到dict 1的前四个元素并重复该过程,直到dict1中的所有56个元素都有{Place:x}.

所以我最终得到的是:

newdict = [{'Count': '307', 'name': 'Other', 'Percentage': '7.7%', 'Place': 'Home'}, {'Count': '7,813', 'name': 'Other', 'Percentage': '6.8%', 'Place':'Home'},{'Name': 'Other', 'Percentage': '6.6%', 'Place': 'Home', 'Count': '1,960'},{'Name': 'Other', 'Percentage': '7.6%', 'Place': 'Home', 'Count': '1,090'},{'Name': 'Other', 'Percentage': '7.6%', 'Place': 'Forest', 'Count': '1,090'} ]

等等..

dict2用尽时,它应该从第一个元素开始.

所以我更新了问题.我对这个问题的第一个看法是将dict2中相同的键:值增加到: dict2 = [{'Place': 'Home'}, {'Place':'Home'},{'Place':'Home'},{'Place':'Home'},{'Place':'Forest'},{'Place':'Forest'}...] 然后使用下面提到的相同方法合并字典.但我相信应该有办法在不改变dict2的情况下做到这一点.

Pat*_*ugh 7

我们将使用zipitertools.cycle配对两个列表中的元素.

from itertools import cycle

for a, b in zip(dict1, cycle(dict2)):
    a.update(b)
Run Code Online (Sandbox Code Playgroud)

如果您不想修改原始列表,则会更复杂一些.

from itertools import cycle, chain

new_list = [{k:v for k, v in chain(a.items(), b.items())} for a, b in zip(dict1, cycle(dict2))]
Run Code Online (Sandbox Code Playgroud)

  • 如果你想建立一个新的列表......`[dict(a,**b)为a,b为zip(dict1,cycle(dict2))] (2认同)