Come faccio a stampare le coppie chiave-valore di un dizionario in Python


Risposte:


327

Il tuo codice esistente ha solo bisogno di una piccola modifica. i è la chiave, quindi dovresti solo usarla:

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

Puoi anche ottenere un iteratore che contiene sia chiavi che valori. In Python 2, d.items()restituisce un elenco di tuple (chiave, valore), mentre d.iteritems()restituisce un iteratore che fornisce lo stesso:

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

In Python 3, d.items()restituisce l'iteratore; per ottenere un elenco, devi passare l'iteratore a list()te stesso.

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

60

Una piccola introduzione al dizionario

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')

Chiavi di stampa, valori metodo uno

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

Un altro metodo

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

Puoi ottenere le chiavi usando iter

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

Puoi ottenere il valore della chiave del dizionario usando get(key, [value]):

d.get('a')
'apple'

Se la chiave non è presente nel dizionario, quando viene fornito il valore predefinito, verrà restituito un valore.

d.get('c', 'Cat')
'Cat'


9

Il dizionario:

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

Un'altra soluzione a una riga:

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

Produzione:

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

(ma, dal momento che nessuno ha suggerito qualcosa di simile prima, sospetto che non sia una buona pratica)


1
penso che questa dovrebbe essere sicuramente una risposta più accettata! ... Sento che questa risposta dimostra il tipo di potenza in Python che viene principalmente ignorato ... Puoi anche fare quanto segue per sbarazzarti del '()' ... print(*[f"{': '.join(map(str,v))}" for i,v in enumerate(list(d.items()))], sep='\n').... oppure puoi fare quanto segue per comodamente stampare anche l'indice #print(*[f"[{i}] {': '.join(map(str,v))}" for i,v in enumerate(list(d.items()))], sep='\n')
serra


4

Puoi accedere alle tue chiavi e / o valori chiamando gli elementi () sul tuo dizionario.

for key, value in d.iteritems():
    print(key, value)

1
hai detto items()nella prima riga del testo e nel codice che hai inserito iteritems(). In python3x il modo corretto è quello dict.items()che hai detto prima.
Joel Carneiro,

3

Se si desidera ordinare l'output in base alla chiave dict, è possibile utilizzare il pacchetto di raccolta .

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

Funziona su Python 3


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

1

Oltre ai modi già menzionati .. puoi usare '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]

O

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

o usando itemgetter

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

0

Un semplice dizionario:

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

Per stampare una coppia specifica (chiave, valore) in Python 3 (coppia all'indice 1 in questo esempio):

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

Produzione:

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

Ecco una soluzione a una fodera per stampare tutte le coppie in una tupla:

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

Produzione:

(('X', 'yes'), ('Y', 'no'), ('Z', 'ok'))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.