2014-03-24 24 views
0
dico = {"dico": {1:"bailler",2:"bailler",3:"percer",4:"calculer",5:"calculer",6:"trouer",7:"bailler",8:"découvrir",9:"bailler",10:"miser",11:"trouer",12:"changer"}} 

我有一個這樣的字典的大詞典。我想把意識元素放在一起。因此,創造一種條件,這將說如果"dico"的值等於把它們放在一個set()如何比較字典中的值來填充集合()

b=[set(1,2,7,9),set(3),set(4,5),set(6,11),set(8),set(10),set(12)] 

我不知道,如果問題已經被問,但作爲一個新的pythonner我不擁有所有的鑰匙...... ^^

謝謝你的回答

+0

你不能在一個集合中放置相等的項目(當然,你可以,但它不會影響集合)。集合正好相反。 – Hyperboreus

+0

這看起來像這個問題類似的問題:[http://stackoverflow.com/questions/15751979/grouping-python-dictionary-keys-as-a-list-and-create-a-new-dictionary-with-這個](http://stackoverflow.com/questions/15751979/grouping-python-dictionary-keys-as-a-list-and-create-a-new-dictionary-with-this) – beercodebeer

回答

0

你應該這樣寫你的數據:

dico = ["bailler", "bailler", "percer", "calculer", "calculer", "trouer", "bailler", "découvrir", "bailler", "miser", "trouer", "changer"] 

如果要算同文元素的數量,使用collections.Counter

import collections 
counter=collections.Counter(dico) 
print(counter) 

它返回一個Counter對象:

Counter({'bailler': 4, 'calculer': 2, 'trouer': 2, 'd\xc3\xa9couvrir': 1, 'percer': 1, 'changer': 1, 'miser': 1}) 
1

我會扭轉你的字典,並具有價值set(),然後返回所有的值。

>>> from collections import defaultdict 
>>>>my_dict= {"dico": {1:"bailler",2:"bailler",3:"percer",4:"calculer",5:"calculer",6:"trouer",7:"bailler",8:"découvrir",9:"bailler",10:"miser",11:"trouer",12:"changer"}} 
>>> my_other_dict = defaultdict(set) 
>>> for dict_name,sub_dict in my_dict.iteritems(): 
    for k,v in sub_dict.iteritems(): 
     my_other_dict[v].add(k) #the value, i.e. "bailler" is now the key 
           #e.g. {"bailler":set([1,2,9,7]),... 


>>> [v for k,v in my_other_dict.iteritems()] 
[set([8]), set([1, 2, 9, 7]), set([3]), set([4, 5]), set([12]), set([11, 6]), set([10])] 

當然作爲cynddl曾指出,如果你在一個列表索引將永遠是「鑰匙」,簡單地列舉名單,你會不會有原始數據存儲爲一本字典,也不能使用sets()因爲指數是獨特的。

0

dict.setdefault()方法可以用於這樣的任務,以及dict.items(),它通過(key, value)對迭代字典。

>>> dico = {"dico": {1:"bailler",2:"bailler",3:"percer",4:"calculer",5:"calcul 
er",6:"trouer",7:"bailler",8:"découvrir",9:"bailler",10:"miser",11:"trouer",12:" 
changer"}} 
>>> newdict = {} 
>>> for k, subdict in dico.items(): 
...  newdict[k] = {} 
...  for subk, subv in subdict.items(): 
...   newdict[k].setdefault(subv, set()).add(subk) 
... 
>>> newdict 
{'dico': {'bailler': {1, 2, 9, 7}, 'miser': {10}, 'découvrir': {8}, 'calculer': 
{4, 5}, 'changer': {12}, 'percer': {3}, 'trouer': {11, 6}}} 
>>> newdict['dico'].values() 
dict_values([{1, 2, 9, 7}, {10}, {8}, {4, 5}, {12}, {3}, {11, 6}])