首页 > 解决方案 > 如何在列表之外的字典中合并键?

问题描述

您好,我试图获取具有相同键的字典并合并其值,如果存在重复,则只保留一个重复值。

data = {"test1":["data1", "data2"],
   "test1":["data3", "data4", "data2"],
   "test2":["1data", "2data"],
   "test2":["3data", "4data", "2data"]
   }

desired_result = {"test1":["data1", "data2", "data3", "data4"],
                 "test2":["1data", "2data", "3data", "4data"]
                 }

任何想法如何获得结果?

标签: pythonpython-3.xlistdictionary

解决方案


首先,您需要创建listof dict (因为您不能拥有具有相同键的字典)然后遍历它们并将extend它们listkeyofdict然后set用于删除duplicated,如下所示:

data = [{"test1":["data1", "data2"]},{"test1":["data3", "data4", "data2"]},{"test2":["1data", "2data"]},{"test2":["3data", "4data", "2data"]}]

from collections import defaultdict

rslt_out = defaultdict(list)
for dct in data:
    for k,v in dct.items():
        rslt_out[k].extend(v)
     

for k,v in rslt_out.items():
    rslt_out[k] = list(set((v)))
        
print(rslt_out)

输出:

defaultdict(list,
            {'test1': ['data3', 'data4', 'data2', 'data1'],
             'test2': ['2data', '3data', '1data', '4data']})

推荐阅读