簡體   English   中英

如何在python中合並字典中的字典?

[英]How to merge dicts from a list of dicts in python?

我已經為此花費了很長時間,現在將其交給更明智的人。 我有一個字典列表(列表的長度可以從1到100秒不等)。 這些列表大部分具有重復項,其中一個或兩個值有所不同。 所有字典的鍵始終保持不變。 一個例子如下:

myList = [
{"k1" : "v11", "k2" : "v21", "k3" : "v31", "k4" : "v41"},
{"k1" : "v12", "k2" : "v22", "k3" : "", "k4" : ""},
{"k1" : "v11", "k2" : "v21", "k3" : "", "k4" : "v41"},
{"k1" : "v11", "k2" : "v21", "k3" : "v31", "k4" : ""},
{"k1" : "v12", "k2" : "v22", "k3" : "v32", "k4" : ""}
]

現在我知道myList [0],myList [2]和myList [3]相同,因為它們的大多數當前值相同。 同樣,myList [1]和myList [4]相同。

我想要的是實現一個功能merge(myList),它將給出這樣的輸出:

newList = [
{"k1" : "v11", "k2" : "v21", "k3" : "v31", "k4" : "v41"},
{"k1" : "v12", "k2" : "v22", "k3" : "v32", "k4" : ""}
]

在此先感謝您的幫助。

干杯,帕里托什

我將所有值收集到帶有set值的defaultdict ,然后將這些值解壓縮到單獨的字典中; 通過一些實驗,我猜測您想忽略空值,而只將它們放回去以組成輸出字典:

from collections import defaultdict
from itertools import izip_longest

values = defaultdict(set)
for map in myList:
    for key, value in map.iteritems():
        if value:
            values[key].add(value)

keys = list(values)
newList = [dict(zip(keys, row)) for row in izip_longest(*(sorted(v) for v in values.itervalues()), fillvalue='')]

現在我們得到:

[{'k1': 'v11', 'k2': 'v21', 'k3': 'v31', 'k4': 'v41'},
 {'k1': 'v12', 'k2': 'v22', 'k3': 'v32', 'k4': ''}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM