it-swarm.com.de

aktualisieren Sie das Wörterbuch mit dynamischen Schlüsseln und Werten in Python

Ich habe ein Wörterbuch und möchte Schlüssel und Werte dynamisch einfügen, aber ich habe es nicht geschafft. Das Problem ist, dass wenn ich die Aktualisierungsmethode verwende, kein Paar hinzugefügt wird, sondern die vorherigen Werte gelöscht werden. Ich habe also nur den letzten Wert, wenn das Wörterbuch Gedruckt wird. Hier ist mein Code 

i = 0
for o in iterload(f):
    i=i+1
    mydic = {i : o["name"]}
    mydic.update({i : o["name"]})
    for k, v in mydic.items():
        print(k,v) 
print(mydic)

f ist eine Datei, die ich mit Python-Code parse. Als Ergebnis bekomme ich 

{3: 'toto'}

das ist das letzte Element. Gibt es eine Lösung, um alle Elemente in meinem Wörterbuch zu haben 

Danke im Voraus 

Ich habe eine andere Frage 

Jetzt muss ich prüfen, ob ein Eingabewert einem Schlüssel aus meinem Wörterbuch entspricht und wenn dies der Fall ist, muss der Wert dieses Schlüssels abgerufen werden, um mit der Analyse der Datei und weiteren Informationen fortzufahren.

Hier ist mein Code:

f = open('myfile','r')
nb_name = input("\nChoose the number of the name :")

for o in iterload(f):
    if o["name"] == mydic[nb_name]: 
        ...

Ich bekomme einen Schlüsselfehler

Traceback (most recent call last):
  File ".../test.py", line 37, in <module>
            if o["name"] == mydic[nb_name]: 
KeyError: '1'

Ich verstehe das Problem nicht 

13
user850287

Entfernen Sie die folgende Zeile:

    mydic = {i : o["name"]}

und füge vor deiner Schleife folgendes hinzu:

mydic = {}

Andernfalls erstellen Sie bei jeder Iteration ein brandneues Ein-Element-Wörterbuch.

Auch das Folgende:

mydic.update({i : o["name"]})

wird genauer als geschrieben

mydic[i] = o["name"]

Beachten Sie schließlich, dass die gesamte Schleife als Wörterbuchverständnis neu geschrieben werden kann:

mydic = {i+1:o["name"] for i,o in enumerate(iterload(f))}
27
NPE

Sie können len() verwenden, um den Wert einzufügen:

#!/usr/bin/python

queue = {}

queue[len(queue)] = {'name_first': 'Jon', 'name_last': 'Doe'}
queue[len(queue)] = {'name_first': 'Jane', 'name_last': 'Doe'}
queue[len(queue)] = {'name_first': 'J', 'name_last': 'Doe'}

print queue
2
HelpNeeder

@NPE wies auf das Problem in Ihrem Code hin (das Diktat wird bei jeder Wiederholung neu definiert). 

Hier ist eine weitere Möglichkeit, das Dikt (Python 3-Code) zu generieren:

from operator import itemgetter

mydict = dict(enumerate(map(itemgetter("name"), iterload(f)), start=1))

Über KeyError: '1': input() gibt eine Zeichenfolge in Python 3 zurück, das Wörterbuch mydict erwartet jedoch eine ganze Zahl. Um die Zeichenfolge in eine Ganzzahl umzuwandeln, rufen Sie int auf:

nb_name = int(input("\nChoose the number of the name :"))
1
jfs