Ich versuche, eine Datei in ein Wörterbuch aufzunehmen. Die Datei ist wie folgt:

1 some something something
2 go goforit doit 
17 non so 

Ich versuche so etwas, aber es funktioniert nicht:

def filetodic():
 d={}
 with open("file.txt") as f:
  for line in f:
   key  = line.split()
 return d
print filetodic()

BEARBEITEN: Der Schlüssel für jedes Feld im Wörterbuch muss die Nummer sein, die als erstes Element in jeder Zeile der Datei erscheint.

0
george mano 21 Okt. 2012 im 22:51

3 Antworten

Beste Antwort

Versuche dies:

def filetodic():
    d={}
    f = open("file.txt")
    for line in f:
        key  = line.split()
        d[key[0]]= ' '.join(key[1:])
    return d

print filetodic()
3
Faruk Sahin 21 Okt. 2012 im 19:00

Versuchen Sie es mit {1:"some something something", 2:"go goforit doit"} (wie in einem Kommentar angegeben)

k, v = line.rstrip().split(None, 1)
d[int(k)] = v

Beachten Sie, dass dadurch der Abstand im Wert selbst erhalten bleibt (z. B. wird 1 abc  def zu 1:'abc  def' anstelle von 1:'abc def').

3
nneonneo 21 Okt. 2012 im 19:28

Mit regulären Ausdrücken:

rg = re.compile(r'(?P<k>[0-9]+)[ \t]+(?P<v>[A-Za-z\t .]+)')

def filetodic(fileo):
    return {int(k):v.strip() for k,v in [rg.match(line).groups() for line in fileo]}

print filetodic(open("test.txt"))
0
Zak Patterson 21 Okt. 2012 im 19:21