2015-06-24 143 views
-1

假設我有一個包含許多具有相同值的項目的字典;例如:Python - 將字典拆分爲具有相同值的字典?

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

'from itertools import groupby' – LittleQ

+1

你確定你不想只把它變成列表字典嗎?例如''''''['hello','bonjour'],'z':['goodbye','au revoir'],'m':['你好嗎']' 另外,你真的需要展示您嘗試過的內容以及您需要幫助時遇到的問題。 –

回答

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

對於輸入字典中的每個唯一值,我們創建了一個字典,並從輸入字典添加鍵值對,其中值等於該值。然後我們將每個字典追加到一個列表中,最終返回。