2016-11-29 1 views
-1

Ich habe 3 Wörterbücher:Split ein Wörterbuch unter Schlüsseln aus 2 verschiedenen anderen Wörterbuch kommen

dict1 = {'Name1':'Andrew','Name2':'Kevin'....'NameN':'NameN'}- this would have maximum 20 names 
dict2 = {'Travel':'Andrew','Footbal':'Kevin',...'Nhobby':'NameN'}- this would have as many names as there are in dict1 
dict3 = {'Travel':'ID01','Footbal':'ID02','Travel':'ID03','Photo':'ID04','Footbal':'ID05','Photo':'ID06','Climbing':'ID07'....} 

Ich mag würde die 3 Wörterbücher kombinieren, so dass der 3. ein auf diese Weise endet:

dict3 = {'Andrew':'ID01','Kevin':'ID02','Andrew':'ID03','Kevin':'ID04','Kevin':'ID05','Kevin':'ID06','Andrew':'ID07',....}. Basically the hobbies that are in the dict 2 will be kept while the remaining hobbies will be split among the total number of names with a +1 in the case of an uneven number of hobbies. 

Ich habe versucht, die Merge-Funktion von hier Merge dictionaries retaining values for duplicate keys, aber ich habe eine schlechte Zeit, die dict3 gleichmäßig unter allen Namen zu teilen.

+3

Ihre gewünschte Ausgabe ist nicht möglich. Wörterbücher müssen eindeutige Schlüssel haben. – DeepSpace

Antwort

1

Die gewünschte Ausgabe ist nur möglich, wenn die Werte von dict2 eindeutig sind (weil sie zu Schlüsseln des Ergebniswörterbuchs werden). In diesem Fall können Sie diese verwenden:

res_dict = {val: dict3[dict2.keys()[dict2.values().index(val)]] for val in dict1.values()} 

Ausgang:

>>> dict1 = {'Name1': 'Andrew', 'Name2': 'Kevin'} 
>>> dict2 = {'Travel': 'Andrew', 'Footbal': 'Kevin'} 
>>> dict3 = {'Travel': 'ID01', 'Footbal': 'ID02'} 

>>> res_dict = {val: dict3[dict2.keys()[dict2.values().index(val)]] for val in dict1.values()} 
>>> res_dict 
{'Andrew': 'ID01', 'Kevin': 'ID02'} 

Was Sie tun können, wenn Ihr dict2 Werte nicht eindeutig zuzuordnen sind, ist Listen zu verwenden res_dict Werte zu speichern, wie folgt:

dict1 = {'Name1': 'Andrew', 'Name2': 'Kevin'} 
dict2 = {'Travel': 'Andrew', 'Footbal': 'Kevin', 'Photo': 'Andrew'} 
dict3 = {'Travel': 'ID01', 'Footbal': 'ID02', 'Photo': 'ID03'} 

res_dict = {} 

for val in dict1.values(): 
    val_keys = [] 
    for key in dict2.keys(): 
     if dict2[key] == val: 
      val_keys.append(key) 
    for item in val_keys: 
     if dict2[item] in res_dict: 
      res_dict[dict2[item]].append(dict3[item]) 
     else: 
      res_dict[dict2[item]] = [dict3[item]] 

Ausgang:

>>> res_dict 
{'Andrew': ['ID03', 'ID01'], 'Kevin': ['ID02']} 
+0

Hey Ettanany, das scheint zu funktionieren, aber nur wenn Sie einmal Tasten in dict3 haben, hat mein dict wiederkehrende Tasten obwohl –

+0

Werfen Sie einen Blick auf den Anfang meiner Antwort, ich erwähnte, dass es nur funktioniert, wenn die Werte von dict2 einzigartig sind, weil Ein Wörterbuch kann nicht mehrere Elemente mit demselben Schlüssel enthalten. – ettanany

+0

@AndreiCozma - "Mein Diktat hat sich wiederholende Schlüssel" Nein, tut es nicht. – TigerhawkT3

Verwandte Themen