Wie teilen wir die erste Zeile in einer Textdatei und machen sie als Schlüssel und Jede Zeile danach sind die Werte für jeden Schlüssel. Ohne Importe

Was ich bisher habe:

new_dict = {}
with open(file, 'r') as f:
    for line in f:
        list = line.strip().split(',')
        for item in list:
            new_dict[item] = []

Was dies ausgibt: {'name': [], 'last': [], 'middle': []}

Wie gehe ich nun zur nächsten Zeile über, teile das Komma und hänge das erste Element an den ersten Schlüssel, das zweite Element an den zweiten Schlüssel usw. an.

file:
name, last, middle
bob, jones, m
jones, bob, k
alice, lol, f

Ergebnis am Ende:

{'name': ['bob', 'jones', 'alice'], 'last': ['jones', 'bob', 'lol'], 'middle': ['m', 'k', 'f']}
2
Sc4r 1 Dez. 2013 im 09:26

3 Antworten

Beste Antwort
new_dict = {}
names = [] # used map 0, 1, 2 to `name`, `last`, `middle`
with open('/path/to/test.txt') as f:

    # Handle header (the first) line: `name, last, middle`
    for name in next(f).split(','): # split fields by `,`
        name = name.strip()  # remove surrounding spaces
        names.append(name)
        new_dict[name] = []  # initialize dictionary with empty list.

    # Handle body.
    for line in f:
        # enumerate(['bob', 'jones', 'm']) return an interator
        #    that generates (0, 'bob'), (1, 'jones'), (2, 'm')
        for i, value in enumerate(line.split(',')):
            new_dict[names[i]].append(value.strip())

print(new_dict)

Ausgabe:

{'middle': ['m', 'k', 'f'], 'last': ['jones', 'bob', 'lol'], 'name': ['bob', 'jones', 'alice']}
2
falsetru 1 Dez. 2013 im 06:40

Ich denke die Logik ist:

  1. Lesen Sie die erste Zeile und teilen Sie sie auf ,.
  2. Nehmen Sie jeden Wert und erstellen Sie die Schlüssel eines Wörterbuchs.
  3. Lesen Sie den Rest der Zeilen und fügen Sie sie einer Liste hinzu, die der richtigen 'Spalte' oder dem richtigen Schlüssel entspricht.

Hier ist ein Ansatz für die obige Logik:

d = {}
with open('somefile.txt') as f:
   first_line = next(f)
   for column_title in first_line.split(','):
       d[column_title.strip()] = []
   for line in f:
       if line.strip():
           # this will skip blanks
           name, last, middle = line.split(',')
           d['name'].append(name.strip())
           d['last'].append(last.strip())
           d['middle'].append(middle.strip())
-1
Burhan Khalid 1 Dez. 2013 im 05:41
answer = {}
for attr in "name last middle".split():
  answer[attr] = []
with open("path/to/input") as infile:
  for line in infile:
    for k,v in zip("name last middle".split(), line.strip().split(',')):
      answer[k].append(v)
0
inspectorG4dget 1 Dez. 2013 im 05:31