Comment imprimer les paires clé-valeur d'un dictionnaire en python

176

Je souhaite générer mes paires clé / valeur à partir d'un dictionnaire python en tant que tel:

key1 \t value1
key2 \t value2

J'ai pensé que je pourrais peut-être le faire comme ceci:

for i in d:
    print d.keys(i), d.values(i)

mais évidemment ce n'est pas comme ça que ça se passe keys()et values()n'acceptez pas d'argument.

Oaklander114
la source
duplication possible de Python: comment imprimer la clé d'un dictionnaire?
Mauro Baraldi

Réponses:

327

Votre code existant a juste besoin d'un petit ajustement. i est la clé, il vous suffit donc de l'utiliser:

for i in d:
    print i, d[i]

Vous pouvez également obtenir un itérateur contenant à la fois des clés et des valeurs. En Python 2, d.items()renvoie une liste de tuples (clé, valeur), tandis que d.iteritems()retourne un itérateur qui fournit la même chose:

for k, v in d.iteritems():
    print k, v

En Python 3, d.items()renvoie l'itérateur; pour obtenir une liste, vous devez vous transmettre l'itérateur list().

for k, v in d.items():
    print(k, v)
chepner
la source
60

Une petite introduction au dictionnaire

d={'a':'apple','b':'ball'}
d.keys()  # displays all keys in list
['a','b']
d.values() # displays your values in list
['apple','ball']
d.items() # displays your pair tuple of key and value
[('a','apple'),('b','ball')

Imprimer les clés, méthode des valeurs un

for x in d.keys():
    print x +" => " + d[x]

Une autre méthode

for key,value in d.items():
    print key + " => " + value

Vous pouvez obtenir des clés en utilisant iter

>>> list(iter(d))
['a', 'b']

Vous pouvez obtenir la valeur de la clé du dictionnaire en utilisant get(key, [value]):

d.get('a')
'apple'

Si la clé n'est pas présente dans le dictionnaire, lorsque la valeur par défaut est donnée, la valeur sera renvoyée.

d.get('c', 'Cat')
'Cat'
Hackaholic
la source
16

Ou, pour Python 3:

for k,v in dict.items():
    print(k, v)
Patrick Beeson
la source
9

Le dictionnaire:

d={'key1':'value1','key2':'value2','key3':'value3'}

Une autre solution en une ligne:

print(*d.items(), sep='\n')

Production:

('key1', 'value1')
('key2', 'value2')
('key3', 'value3')

(mais, puisque personne n'a suggéré quelque chose comme ça auparavant, je soupçonne que ce n'est pas une bonne pratique)

Nara Begnini
la source
1
Je pense que cela devrait certainement être une réponse plus acceptée! ... je pense que cette réponse démontre le type de puissance en python qui est le plus souvent ignoré ... vous pouvez également faire ce qui suit pour vous débarrasser du '()' ... print(*[f"{': '.join(map(str,v))}" for i,v in enumerate(list(d.items()))], sep='\n').... ou vous pouvez faire ce qui suit pour imprimez aussi facilement les numéros d'indexprint(*[f"[{i}] {': '.join(map(str,v))}" for i,v in enumerate(list(d.items()))], sep='\n')
effet de serre
4
for key, value in d.iteritems():
    print key, '\t', value
Mauro Baraldi
la source
4

Vous pouvez accéder à vos clés et / ou valeurs en appelant items () sur votre dictionnaire.

for key, value in d.iteritems():
    print(key, value)
goulon
la source
1
vous avez dit items()dans la première ligne de votre texte et dans le code que vous avez mis iteritems(). Dans python3x, la bonne manière est celle dict.items()que vous avez dit en premier.
Joel Carneiro
3

Si vous souhaitez trier la sortie par clé dict, vous pouvez utiliser le package de collecte .

import collections
for k, v in collections.OrderedDict(sorted(d.items())).items():
    print(k, v)

Cela fonctionne sur python 3

paolof89
la source
2
>>> d={'a':1,'b':2,'c':3}
>>> for kv in d.items():
...     print kv[0],'\t',kv[1]
... 
a   1
c   3
b   2
Irshad Bhat
la source
1

En plus des moyens déjà mentionnés .. peut utiliser 'viewitems', 'viewkeys', 'viewvalues'

>>> d = {320: 1, 321: 0, 322: 3}
>>> list(d.viewitems())
[(320, 1), (321, 0), (322, 3)]
>>> list(d.viewkeys())
[320, 321, 322]
>>> list(d.viewvalues())
[1, 0, 3]

Ou

>>> list(d.iteritems())
[(320, 1), (321, 0), (322, 3)]
>>> list(d.iterkeys())
[320, 321, 322]
>>> list(d.itervalues())
[1, 0, 3]

ou en utilisant itemgetter

>>> from operator import itemgetter
>>> map(itemgetter(0), dd.items())     ####  for keys
['323', '332']
>>> map(itemgetter(1), dd.items())     ####  for values
['3323', 232]
SuperNova
la source
0

Un dictionnaire simple:

x = {'X':"yes", 'Y':"no", 'Z':"ok"}

Pour imprimer une paire (clé, valeur) spécifique dans Python 3 (paire à l'index 1 dans cet exemple):

for e in range(len(x)):
    print(([x for x in x.keys()][e], [x for x in x.values()][e]))

Production:

('X', 'yes')
('Y', 'no')
('Z', 'ok')

Voici une solution à une seule ligne pour imprimer toutes les paires dans un tuple:

print(tuple(([x for x in x.keys()][i], [x for x in x.values()][i]) for i in range(len(x))))

Production:

(('X', 'yes'), ('Y', 'no'), ('Z', 'ok'))
Fouad Boukredine
la source