2013-06-17 5 views
0

Я пытаюсь написать код Python, который позволит мне взять текст и прочитать его по строкам. В каждой строке слова просто входят в словарь в качестве ключа, а номера должны быть присвоенными значениями в качестве списка. файл «topics.txt» будет состоять из сотен строк, которые имеют такой же формат, как это:Как создать словарь из файла?

1~cocoa 
2~ 
3~ 
4~ 
5~grain~wheat~corn~barley~oat~sorghum 
6~veg-oil~linseed~lin-oil~soy-oil~sun-oil~soybean~oilseed~corn~sunseed~grain~sorghum~wheat 
7~ 
8~ 
9~earn 
10~acq 

и так далее .. мне нужно создать словари для каждого слова напр: идеале , название «зерно» будет ключевым в словаре, а значения будут dict [зерно]: [5,6, ..]. так же, "какао" будет еще один ключ и значение будет ДИКТ [какао]: [1, ..] Не так много, но до сих пор ..

with open("topics.txt", "r") as fi: # Data read from a text file is a string 
    d = {} 
    for i in fi.readlines(): 
     temp = i.split() 
     #i am lost here 
     num = temp[0] 
     d[name] = [map(int, num)] 
+0

Вы объяснили свою цель, но, похоже, вы не задали никаких вопросов. Какой у Вас вопрос? –

+0

Я не могу создать словари –

ответ

7

http://docs.python.org/3/library/collections.html#collections.defaultdict

import collections 

with open('topics.txt') as f: 
    d = collections.defaultdict(list) 
    for line in f: 
     value, *keys = line.strip().split('~') 
     for key in filter(None, keys): 
      d[key].append(value) 

value, *keys = ... is Extended Iterable Unpacking который доступен только в Python 3.x.

+1

Обратите внимание, что синтаксис 'value, * keys = ...' работает только в Python 3. – Lynn

+3

@nooodl, Этот вопрос помечен 'python-3.x'. – falsetru

+0

Это, но я думал, что это будет полезная небольшая часть информации, тем не менее (что, если кто-то наткнулся на этот вопрос и задался вопросом, почему этот ответ не сработал для них?) – Lynn

0
with open("topics.txt", "r") as file: # Data read from a text file is a string 
    dict = {} 
    for fullLine in file: 
     splitLine = fullLine.split("~") 
     num = splitLine[0] 
     for name in splitLine[1:]: 
      if name in dict: 
       dict[name] = dict[name] + (num,) 
      else 
       dict[name] = (num,) 
+0

Посмотрите внимательнее: одно и то же слово встречается на нескольких строках. Ваш код не справляется с этим. – alexis

+0

@alexis Спасибо, я этого не заметил. – AJMansfield

Смежные вопросы