Ich habe eine Datei mit zwei Spalten, dh
1 a
2 b
3 c
Ich möchte diese Datei in einem Wörterbuch so lesen, dass Spalte 1 der Schlüssel und Spalte 2 der Wert ist, dh
d = {1:'a', 2:'b', 3:'c'}
Die Datei ist klein, daher ist Effizienz kein Problem.
python
file
dictionary
Darren J. Fitzpatrick
quelle
quelle
with
wird hier verwendet, um die Dateibereinigung durchzuführen. Wenn Sie den Block verlassen (entweder nur durch normalen Ausführungsablauf oder durch eine Ausnahme), wird die Datei automatisch geschlossen. Weitere Informationen zu Kontextmanagernfor line in open("file.txt"):
Bereinigen Sie auf die gleiche Weise. Und wenn f ein lokaler Wertf
ist, wird dieser freigegeben, wenn der Bereich verloren geht. Der einzige Fall, in dem diese Anweisung nützlich ist, ist für lange Funktionen (nicht gut für die Qualität) oder wenn Sie eine globale Variable verwenden.for line in open('file.txt')
ist nicht tun Bereinigung auf die gleiche Weise. Nicht alle Python-Implementierungen sind gleich.with
garantiert, dass die Datei geschlossen wird, wenn der Block verlassen wird. Wenn diefor
Leitung fertig ist,close
kann aufgerufen werden.CPython
es wird, aber Versionen wieIronPython
haben faule Müllsammler.Dadurch bleibt der Schlüssel als Zeichenfolge:
quelle
dict([line.split() for line in f])
ist ausreichend, imo.dict([x.rstrip().split(None, 1) for x in f])
stattdict(x.rstrip().split(None, 1) for x in f)
. Für diejenigen, die dasselbe denken, ist Ersteres ein Generatorausdruck anstelle des Listenverständnisses, wie hier erläutert: python.org/dev/peps/pep-0289(PEP-289) . Etwas Neues gelernt!Wenn Ihre Python - Version 2.7+ ist, können Sie auch eine Verwendung dict Verständnis wie:
quelle
quelle
partition
? undwith
Aussage?partition
ist schneller und wird genau für diesen Zweck erstellt.with
ist ein einfacher Weg, um dies sicherzustellen.strip
, würde ich sagen.Durch Wörterbuchverständnis
Oder von Pandas
quelle
IMHO etwas pythonischer, um Generatoren zu verwenden (wahrscheinlich benötigen Sie 2.7+ dafür):
Dadurch werden auch Zeilen herausgefiltert, die nicht mit einer Ganzzahl beginnen oder nicht genau zwei Elemente enthalten
quelle
quelle
re
? Ernsthaft?split()
funktioniert nicht fast lautlos, wenn das Dateiformat nicht normal ist.Wenn Sie einen Liner lieben, versuchen Sie:
Eingabe DATEI = Pfad zur Datei, SEP = Schlüssel-Wert-Trennzeichen
Nicht die eleganteste oder effizienteste Art, aber trotzdem sehr interessant :)
quelle
Hier ist eine weitere Option ...
quelle
Einfache Option
Die meisten Methoden zum Speichern eines Wörterbuchs verwenden JSON, Pickle oder Zeilenlesen. Vorausgesetzt, Sie bearbeiten das Wörterbuch nicht außerhalb von Python, sollte diese einfache Methode auch für komplexe Wörterbücher ausreichen. Obwohl Pickle für größere Wörterbücher besser ist.
quelle