使用Python中的相同键将字典列表中的唯一值连接起来

Wil*_*Ayd 0 python dictionary list python-3.x

我正在使用一个字典列表,并尝试将它们组合成一个具有以下条件:

  1. 列表中的字典都具有相同的键,新的字典也将如此
  2. 如果所有词典中给定键的值相同,则该值将在新词典的值中出现一次
  3. 如果作为字典的给定键的值是唯一的,则新字典中该键的值将是所有值的逗号分隔字符串

所以我真正要做的是为多个字典中的给定键创建一个集合,并为新字典中的值创建该集合的逗号分隔字符串.为了帮助可视化,给出:

data = [ {"key1": "value1", "key2": "value2", "key3": "value3"},  
         {"key1": "value4", "key2": "value5", "key3": "value3"}, 
         {"key1": "value1", "key2": "value8", "key3": "value3"} ]
Run Code Online (Sandbox Code Playgroud)

我想用以下数据创建一个新的字典:

myDict = {"key1": "value1, value4", "key2": "value2, value5, value8", "key3": "value3"}
Run Code Online (Sandbox Code Playgroud)

有关如何实现这一目标的任何想法?

Dan*_*man 5

collections.defaultdict 是你的朋友.

from collections import defaultdict
temp_dict = defaultdict(set)
for item in data:
   for key, value in item.items():
       temp_dict[key].add(value)
Run Code Online (Sandbox Code Playgroud)

这会给你一个表单中的字典{"key1": ["value1", "value4"]}- 如果你想要值的实际逗号分隔字符串,那么你可以加入它们:

my_dict = {}
for key, value in temp_dict.items():
    my_dict[key] = ", ".join(value)
Run Code Online (Sandbox Code Playgroud)