2017-06-06 1 views
0

Disons que j'ai un dictionnaire qui contient les éléments suivants:Clés de fusion en valeur commune du même dictionnaire

myDict = {'A':[1,2], 'B': [4,5], 'C': [1,2]} 

Je veux créer un nouveau dictionnaire, merged qui fusionne les touches en ayant des valeurs similaires, donc mon merged serait:

merged ={['A', 'C']:[1:2], 'B':[4,5]} 

J'ai essayé d'utiliser la méthode proposée dans ce thread, mais ne peut pas reproduire ce que j'ai besoin.

Des suggestions?

+0

J'ai modifié ma réponse originale pour vous donner presque ce que vous avez demandé mais le code est en désordre. – Rosh

Répondre

1

Ce que vous avez demandé n'est pas possible. Vos clés dans le dictionnaire hypothétique utilisent des listes modifiables. Comme les données mutables ne peuvent pas être hachées, vous ne pouvez pas les utiliser comme clés de dictionnaire. Edit, j'ai essayé de faire ce que vous avez demandé, sauf les touches de ce sont tous des tuples. Ce code est un gâchis mais vous pourrez peut-être le nettoyer.

myDict = {'A':[1,2], 
      'B': [4,5], 
      'C': [1,2], 
      'D': [1, 2], 
      } 


myDict2 = {k: tuple(v) for k, v in myDict.items()} 
print(myDict2) #turn all vlaues into hasable tuples 

#make set of unique keys 
unique = {tuple(v) for v in myDict.values()} 
print(unique) #{(1, 2), (4, 5)} 

""" 
iterate over each value and make a temp shared_keys list tracking for which 
keys the values are found. Add the new key, vlaue pairs into a new 
dictionary""" 
new_dict = {} 
for value in unique: 
    shared_keys = [] 
    for key in myDict: 
     if tuple(myDict[key]) == value: 
      shared_keys.append(key) 
    new_dict[tuple(shared_keys)] = value 
print(new_dict) #{('A', 'C'): (1, 2), ('B',): (4, 5)} 

#change the values back into mutable lists from tuples 
final_dict = {k: list(v) for k, v in new_dict.items()} 
print(final_dict)