2017-09-08 2 views
1

J'ai créé les dictionnaires suivants et un tuple:Looping par toutes les clés dans un tuple de dictionnaires

dict1 = {'a':1,'b':2} 
dict2 = {'c':3,'d':4} 
dict3 = {'e':5,'f':6} 

tuple_purse = dict1, dict2, dict3 

Je veux boucle et imprimer toutes les clés dans tous les dictionnaires en tuple_purse. J'ai essayé le code suivant:

for key in tuple_purse: 
    print(key) 

for key,value in tuple_purse: 
    print(key) 

et a obtenu le résultat suivant:

{'a': 1, 'b': 2} 
{'c': 3, 'd': 4} 
{'e': 5, 'f': 6} 
a 
c 
e 

est-il un moyen de boucle à travers toutes les clés: a, b, c, d, e, f avec élégance?

Merci.

Répondre

0

Un double simple for rapide peut-être? Avez-vous besoin de quelque chose de plus?

for ddict in tuple_purse: 
    for key in ddict: 
     print(key) 
+0

Un dictionnaire itère sur ses clés, vous n'avez donc pas besoin de l'appel '.keys()' explicite. – mwchase

+0

@mwchase Une tentative d'être aussi explicite que possible, je suppose! – pstatix

0

Vous pouvez essayer ceci:

dict1 = {'a':1,'b':2} 
dict2 = {'c':3,'d':4} 
dict3 = {'e':5,'f':6} 
tuple_dict = {**dict1, **dict2, **dict3} 
for i in tuple_dict: 
    print(i, tuple_dict[i]) 

Notez que pour la solution ci-dessus, le code échouera s'il y a plusieurs clés du même nom dans deux ou plusieurs des dicts.

Sortie:

a 1 
b 2 
c 3 
d 4 
e 5 
f 6 

solution python2

new_list = [dict1, dict2, dict3] 
for d in new_list: 
    for k in d: 
     print k, d[k] 

Sortie:

a 1 
b 2 
c 3 
d 4 
e 5 
f 6 
+0

Salut, je me suis une erreur de syntaxe quand je lance: tuple_dict = {** Dict1, ** DICT2, ** dict3} et un TypeError quand je lance: tuple_dict = {Dict1, DICT2, dict3} –

+0

@ KaneChew c'est parce que vous exécutez la solution dans Python2. Essayez Python3. De toute façon, je vais écrire une solution pour Python2. – Ajax1234

+0

oui, je cours python 2 dans une session locale de Jupyter Notebook. –

2

Vous pouvez utiliser chain de itertools.

Faire un itérateur qui retourne les éléments du premier itérable jusqu'à ce qu'il soit épuisé, puis passe au itérable suivant, jusqu'à ce que toutes les itérations soient épuisées. Utilisé pour le traitement de séquences consécutives en une seule séquence

import itertools 

dict1 = {'a':1,'b':2} 
dict2 = {'c':3,'d':4} 
dict3 = {'e':5,'f':6} 

tuple_purse = dict1, dict2, dict3 

for x in itertools.chain.from_iterable(tuple_purse): 
    print(x) 
+1

Vous n'utilisez pas réellement le tuple, vous utiliserez 'chain.from_iterable' sur le tuple par exemple. 'itertools.chain.from_iterable (tuple_purse)' –

+0

@PaulRooney qu'est-ce qui ne va pas avec la syntaxe de tuple? Je l'ai essayé tout à l'heure en 2.7 et 3.6 et ça a bien marché. – mwchase