2010-05-04 10 views
21

folgende Arbeiten wie erwartet:Iterieren über Schlüssel und Wert von defaultdict Wörterbücher

d = [(1,2), (3,4)] 
for k,v in d: 
    print "%s - %s" % (str(k), str(v)) 

Aber das scheitert:

d = collections.defaultdict(int) 
d[1] = 2 
d[3] = 4 
for k,v in d: 
    print "%s - %s" % (str(k), str(v)) 

mit:

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
TypeError: 'int' object is not iterable 

Warum? Wie kann ich es reparieren?

+0

Was Sie genau verwenden versuchen, zu erreichen? In welchem ​​Kontext machst du das? – dlamotte

+1

Ihre beiden Beispiele sind überhaupt nicht vergleichbar. Einer ist eine Liste, der andere ist ein Wörterbuch? Was fragst du? –

+0

Ja, ich habe übersehen, dass die erste eine Liste war;) –

Antwort

48

Sie über dict.iteritems() iterieren müssen:

for k,v in d.iteritems():    # will become d.items() in py3k 
    print "%s - %s" % (str(k), str(v)) 
+0

Danke. Warum funktioniert es mit einem implizit erstellten Wörterbuch? Sind diese Inkonsistenzen/Implementierungsunterschiede? –

+9

@gf Ihr erstes Beispiel ist eine Liste, kein Wörterbuch. –

+2

@Daniel: Autsch, danke :) –

6

, wenn Sie Python 3,6

from collections import defaultdict 

for k, v in d.items(): 
    print(f'{k} - {v}') 
Verwandte Themen