python dictionary append - Wörterbücher mit "for" -Schleifen durchlaufen



5 Answers

Es ist nicht so, dass der Schlüssel ein spezielles Wort ist, sondern dass Wörterbücher das Iterator-Protokoll implementieren. Sie könnten dies in Ihrer Klasse tun, z. B. diese Frage zum Erstellen von Klasseniteratoren.

Bei Wörterbüchern wird es auf der C-Ebene implementiert. Die Details sind in PEP 234 verfügbar. Insbesondere der Abschnitt "Dictionary-Iteratoren":

  • Wörterbücher implementieren einen tp_iter-Slot, der einen effizienten Iterator zurückgibt, der die Schlüssel des Dictionary durchläuft. [...] Das bedeutet, dass wir schreiben können

    for k in dict: ...
    

    das ist äquivalent, aber viel schneller als

    for k in dict.keys(): ...
    

    solange die Einschränkung für Änderungen am Wörterbuch (entweder durch die Schleife oder durch einen anderen Thread) nicht verletzt wird.

  • Fügen Sie Methoden zu Wörterbüchern hinzu, die explizit verschiedene Arten von Iteratoren zurückgeben:

    for key in dict.iterkeys(): ...
    
    for value in dict.itervalues(): ...
    
    for key, value in dict.iteritems(): ...
    

    Dies bedeutet, dass for x in dict die Abkürzung for x in dict.iterkeys() .

values create print

Ich bin etwas verwirrt über den folgenden Code:

d = {'x': 1, 'y': 2, 'z': 3} 
for key in d:
    print key, 'corresponds to', d[key]

Was ich nicht verstehe, ist der key . Wie erkennt Python, dass nur der Schlüssel aus dem Wörterbuch gelesen werden muss? Ist key ein spezielles Wort in Python? Oder ist es einfach eine Variable?




key ist einfach eine Variable.

Für Python2.X :

d = {'x': 1, 'y': 2, 'z': 3} 
for my_var in d:
    print my_var, 'corresponds to', d[my_var]

... oder besser,

d = {'x': 1, 'y': 2, 'z': 3} 
for the_key, the_value in d.iteritems():
    print the_key, 'corresponds to', the_value

Für Python3.X :

d = {'x': 1, 'y': 2, 'z': 3} 
for the_key, the_value in d.items():
    print(the_key, 'corresponds to', the_value)



Dies ist eine sehr verbreitete Schleife. in ist ein Operator. Wenn Sie for key in dict for key in dict.keys() und wann es for key in dict.keys() muss, for key in dict.keys() Artikel Idiomatic Python von David Goodger .




Ich habe einen Anwendungsfall, bei dem ich das Diktat durchlaufen muss, um den Schlüssel, das Wertepaar und den Index abzurufen, der angibt, wo ich bin. So mache ich es:

d = {'x': 1, 'y': 2, 'z': 3} 
for i, (key, value) in enumerate(d.items()):
   print(i, key, value)

Beachten Sie, dass die Klammern um den Schlüssel wert wichtig sind. Ohne die Klammern erhalten Sie einen ValueError, der nicht genug Werte zum Entpacken enthält.




Sie können die Implementierung von dicttype auf GitHub überprüfen. Dies ist die Signatur der Methode, die den Diktieriterator implementiert:

_PyDict_Next(PyObject *op, Py_ssize_t *ppos, PyObject **pkey,
             PyObject **pvalue, Py_hash_t *phash)

CPython dictobject.c




Related