Konvertieren dict-Werte in eine Reihe, während die Erhaltung der dict

Habe ich ein dict wie diese:

(100002: 'APPLE', 100004: 'BANANE', 100005: 'KAROTTE')

Ich versuche, meine dict-haben int-Werte für den Schlüssel (wie Sie es jetzt tut), sondern setzt für die Werte (anstelle von Zeichenfolgen, wie es jetzt ist.) Mein Ziel ist es, in der Lage zu Lesen .csv Datei mit einer Spalte für den Schlüssel (int, nämlich das Element-id-Nummer) und dann Spalten für Dinge wie Größe, Form und Farbe. Ich möchte hinzufügen, diese Informationen in meinem dict, so dass nur die Informationen für die keys bereits in dict Hinzugefügt werden.

Mein Ziel dict könnte wie folgt Aussehen:

(100002: set(['APPLE','MEDIUM','ROUND','RED']), 100004: set(['Banana','MEDIUM','LONG','YELLOW']), 100005: set(['CARROT','MEDIUM','LONG','ORANGE'])

Angefangen mit meiner dict-nur key + string Element name -, ich habe versucht einen code wie diesen zu Lesen, der zusätzliche Informationen aus .csv-Datei:

infile = open('FileWithTheData.csv', 'r')
for line in infile.readlines():
    spl_line = line.split(',')
    if int(spl_line[0]) in MyDict.keys():
        MyDict[int(spl_line[0])].update(spl_line[1:])

Leider ist dieser Fehler heraus sagen AttributeError: 'str' object has no attribute 'update'. Meine versuche zu ändern meine Wörterbuch-Werte in sets, so dass ich dann .update Sie haben dabei Dinge wie diese: (100002: set(['A','P','L','E']), 100004: set(['B','A','N']), 100005: set(['C','A','R','O','T']))
Ich möchte konvertieren Sie die Werte zu einer Reihe, so dass die Zeichenfolge, die aktuell als Wert wird die erste Zeichenfolge in dem Satz eher als Aufbrechen der string in Buchstaben und damit in diesen Briefen.

Ich auch versucht, die Werte einstellen, wenn ich die dict-zippen und zwei Listen zusammen, aber es scheint nicht zu keinen Unterschied machen. So etwas wie dieses
MyDict = dict(zip(listofkeys, set(listofnames)))
noch macht die ganze listofnames Liste in ein set, aber es erreicht nicht mein Ziel, dass jeder Wert in MyDict in eine Reihe mit den entsprechenden string aus listofnames als der erste string im set.

Wie kann ich die Werte in MyDict in eine Reihe, so dass ich hinzufügen kann, zusätzliche Saiten, die eingestellt werden, ohne daß der string, der aktuell Wert in der dict-in eine Reihe von einzelnen Buchstaben?

BEARBEITEN:
Ich machen derzeit MyDict, indem eine Funktion zum generieren einer Liste von Element-ids (auch die keys) und eine weitere Funktion, die sieht die item-ids zu generieren, die eine Liste der entsprechenden item-Namen (verwenden Sie einen zwei-Spalte .csv-Datei als Datenquelle) und dann habe ich zip Sie zusammen.

ANTWORT:
Verwenden Sie die Vorschläge hier, ich kam mit dieser Lösung. Ich fand, dass der Abschnitt, der set()).update kann einfach geändert werden, um list()).anfügen", um die Ausbeute einer Liste anstatt einer Reihe (so dass die Reihenfolge beibehalten wird.) Ich fand es auch einfacher zu aktualisieren .csv-Daten-input-Dateien durch hinzufügen der Spalte mit Namen der FileWithTheData.csv so, dass ich nicht zu Durcheinander mit der dict, konvertieren der Werte setzt, und dann das hinzufügen von mehr Daten. Mein code für diesen Abschnitt sieht nun wie folgt aus:

MyDict = {}
infile = open('FileWithTheData.csv', 'r')
for line in infile.readlines():
    spl_line = line.split(',')
    if int(spl_line[0]) in itemidlist: #note that this is the list I was formerly zipping together with a corresponding list of names to make my dict
        MyDict.setdefault(int(spl_line[0]), list()).append(spl_line[1:])
print MyDict
  • Bitte zeigen Sie, wie Sie erstellen die MyDict variable.
InformationsquelleAutor Qanthelas | 2012-11-08
Schreibe einen Kommentar