假设我有一个包含许多具有相同值的项目的字典;例如:
dict = {'hello':'a', 'goodbye':'z', 'bonjour':'a', 'au revoir':'z', 'how are you':'m'}
如何将字典拆分为具有相同值的字典(在本例中为三个字典)?在这个例子中,我想最终得到这个:
dict1 = {'hello':'a', 'bonjour':'a'}
dict2 = {'goodbye':'z', 'au revoir':'z'}
dict3 = {'how are you':'m'}
答案 0 :(得分:6)
您可以使用itertools.groupby
按公共值收集,然后在列表推导中为每个组创建dict
个对象。
>>> from itertools import groupby
>>> import operator
>>> by_value = operator.itemgetter(1)
>>> [dict(g) for k, g in groupby(sorted(d.items(), key = by_value), by_value)]
[{'hello': 'a', 'bonjour': 'a'},
{'how are you': 'm'},
{'goodbye': 'z', 'au revoir': 'z'}]
答案 1 :(得分:0)
不导入任何模块的另一种方法如下:
def split_dict(d):
unique_vals = list(set(d.values()))
split_dicts = []
for i in range(len(unique_vals)):
unique_dict = {}
for key in d:
if d[key] == unique_vals[i]:
unique_dict[key] = d[key]
split_dicts.append(unique_dict)
return split_dicts
对于输入字典中的每个唯一值,我们创建一个字典并从输入字典中添加值等于该值的键值对。然后我们将每个字典附加到一个列表中,最后返回该列表。