2013-12-01 4 views
2

Как мы разделим первую строку в текстовом файле и сделаем их как клавиши, а каждой строке после этого будут значения для каждого ключа. Без импортаФайл, разделите каждую строку и добавьте ключ в словаре

То, что я до сих пор:

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

что это выходы: {'name': [], 'last': [], 'middle': []}

Теперь, как я перейду к следующей строке, разделить на запятую и добавить первый элемент первого ключа, второго элемента ко второму ключу и т.д.

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

Результат в конце:

{'name': ['bob', 'jones', 'alice'], 'last': ['jones', 'bob', 'lol'], 'middle': ['m', 'k', 'f']} 
+0

Они говорят, «без каких-либо импорта.» –

+1

Почему «без импорта»? Я думал, что в python вы просто «импортируете решение» –

ответ

2
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) 

выход:

{'middle': ['m', 'k', 'f'], 'last': ['jones', 'bob', 'lol'], 'name': ['bob', 'jones', 'alice']} 
+0

Спасибо за это, но не могли бы вы объяснить мне эту часть: для имени в следующем (f) .split (','): name = name.strip() имена .append (name) new_dict [name] = [] – Sc4r

+0

@ Sc4r, я добавил комментарии к коду. Дайте мне знать, если это не ясно. – falsetru

+0

Что дальше (f) делать? Это следующая строка после первого? – Sc4r

0
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) 
-1

Я предполагаю, что логика есть:

  1. Читайте первую строку, разбить его на ,.
  2. Возьмите каждое значение и создайте ключи словаря.
  3. Прочитайте остальные строки и добавьте их в список, соответствующий правильному столбцу или ключу.

Вот подход к вышеприведенной логике:

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()) 
Смежные вопросы