Python - 将字典拆分成具有相同值的字典?

时间:2015-06-24 16:58:42

标签: python dictionary

假设我有一个包含许多具有相同值的项目的字典;例如:

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'}

2 个答案:

答案 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

对于输入字典中的每个唯一值,我们创建一个字典并从输入字典中添加值等于该值的键值对。然后我们将每个字典附加到一个列表中,最后返回该列表。