Wenn Sie ein Python-Wörterbuch in die for-Schleife einfügen, werden dieselben Werte zurückgegeben

Für die Anforderungen des Projekts, indem Sie einige Daten durchlaufen und dem vorgefertigten Wörterbuch die erforderlichen Werte hinzufügen.

Hier ist ein abgespecktes Beispiel für Code, der meine Frage repräsentiert:

class Parser:
    def __init__(self):
        self.records = [['value1','value2','value3'], 
                        ['value4','value5','value6'],
                        ['value7','value8','value9']]
    def get_parsed(self):
        parsed = []
        dic = {'key1': '',
               'key2': '',
               'key3': '',
               }
        for i in self.records:
            dic['key1'] = i[0]
            dic['key2'] = i[1]
            dic['key3'] = i[2]
            parsed.append(dic)
        return parsed

Was ich erwarte, ist eine Liste von Geboten wie dieses:

[{'key1':'value1','key2':'value2','key3':'value3'},
 {'key1':'value4','key2':'value5','key3':'value6'},
 {'key1':'value7','key2':'value8','key3':'value9'}]

Aber was ich bekomme, ist:

[{'key1':'value1','key2':'value2','key3':'value3'},
 {'key1':'value1','key2':'value2','key3':'value3'},
 {'key1':'value1','key2':'value2','key3':'value3'}]

Wenn ich die Wörterbuchinitialisierung in die For-Schleife verschiebe, erhalte ich das gewünschte Ergebnis, verstehe aber nicht, warum das passiert?

EDIT: Die Frage ist mehr "Warum passiert das so?" Ich habe einige Tests in ipython durchgeführt und das ist, was ich habe:

In [1]: d = {'a':'','b':'','c':''}

In [2]: d
Out[2]: {'a': '', 'b': '', 'c': ''}

In [3]: d['a'] = 'value'

In [4]: d['b'] = 'other_value'

In [5]: d['c'] = 'third_value'

In [6]: d
Out[6]: {'a': 'value', 'b': 'other_value', 'c': 'third_value'}

In [7]: d['a'] = 'inserting new value'

In [8]: d
Out[8]: {'a': 'inserting new value', 'b': 'other_value', 'c': 'third_value'}

So könnte der Wert des Schlüssels aktualisiert werden und esÄnderungen, warum passiert es nicht in der FOR-Schleife?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage