2017-04-20 1 views
0

j'ai deux dictionnaires avec le contenu:Combinant des éléments de dictionnaire dans une liste de la liste

dct1 = {'NL': 7,'MC': 9, 'PG': 8} 
dct2 = {'NL': 2,'MC': 10,'PG': 6} 

On peut dire que ces scores représentent à partir d'un jeu où les lettres sont des noms et les chiffres sont les scores. La différence entre les deux dictionnaires sont les nombres dans lesquels ils sont calculés en fonction des critères.

Maintenant, je veux combiner le contenu du dictionnaire dans une liste de liste. Je vais donner une idée approximative de mon code. En fait ce que je l'ai fait alors tournait le contenu dans les deux dictionnaires dans une liste de la liste où:

L1 = [['NL',7],['MC',9],['PG',8]] 
L2 = [['NL',2],['MC',10],['PG',6]] 

Le code pour les transformer en une liste de la liste:

L1 = [] 
for i, occurrences in dct1.items(): 
    L1.append([i,occurrences]) 
L2 = [] 
for j, occurrences in dct2.items(): 
    L2.append([j,occurrences]) 

et une fois que j'imprimer à la fois liste, je reçois comme ce que j'ai écrit ci-dessus.

Mais maintenant, au lieu d'avoir deux listes différentes, je veux combiner les deux dans une liste unique où ma sortie est:

L3 = [['NL',7,2],['MC',9,10],['PG',8,6]] 

Fondamentalement, la liste unique ne doit pas répéter les lettres deux fois et il suffit d'ajouter le deuxième chiffre. Toute aide est très appréciée.

+0

double possible de [Conversion Python Dictionnaire t o Liste] (http://stackoverflow.com/questions/1679384/converting-python-dictionary-to-list) –

Répondre

9

Une compréhension liste devrait faire:

lst = [[k, v, dct2[k]] for k, v in dct1.items()] 
print lst 
# [['NL', 7, 2], ['PG', 8, 6], ['MC', 9, 10]] 

Notez que la commande des sous-listes peut varier, étant donné que les dictionnaires ne sont pas ordonnés.

+1

Wow .. Cloué. –

+0

@Moses Koledoye remercie un groupe. Ça m'a aidé. Je ne suis pas familier avec la compréhension de la liste mais si nous devions avoir 3 dictionnaires ou plus au lieu de 2? cette méthode est-elle limitée à 2 dictionnaires? – Electric

+0

@Electric Non ce n'est pas. Ajoutez simplement la valeur du dictionnaire du 3ème au nième dans la sous-liste interne: '[[k, v, dct2 [k], dct3 [k], ..., dctn [k] pour k, v dans dct1.items() ] ' –

1

Comme clé est identique dans le dictionnaire:

>>> dct1 = {'NL': 7,'MC': 9, 'PG': 8} 

>>> dct2 = {'NL': 2,'MC': 10,'PG': 6} 
>>> L3 = [] 
>>> for key in dct1: 
...  L3.append([key, dct1[key], dct2[key]]) 
... 
>>> L3 
[['NL', 7, 2], ['PG', 8, 6], ['MC', 9, 10] 
0

Vous pouvez utiliser list comprehension pour mettre les éléments dans une liste. En outre, utilisez la méthode get() sur dict afin qu'elle ne renvoie pas d'erreur de clé si la clé n'est pas présente dans l'autre dict.

>>> [(key, val, dct1.get(key)) for key, val in dct2.items()] 
[('NL', 2, 7), ('PG', 6, None), ('MC', 10, 9)] 
0

Assuming you are using python 2.7.x

Pour comprendre

L3 = [] 
for key, value in dct1.iteritems(): 
    L3.append([key, value, dct2[key]) 

OU

court et doux en utilisant la compréhension de la liste:

L3 = [[key, value, dct2[key]] for key, value in dct1.iteritems()]