2013-06-17 9 views
0

필자는 텍스트를 가져 와서 줄 단위로 읽을 수있는 파이썬 코드를 작성하려고합니다. 각 줄에서 단어는 사전으로 키로 들어가고 숫자는 할당 된 값이어야합니다. 그래서파일에서 사전을 만드는 방법은 무엇입니까?

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 

와 .. 내가 전 각 단어 에 대한 사전을 만들어야합니다 : 파일 'topics.txt은'이 같은 형식이 수백 줄의 구성됩니다 을 이상적으로 "곡물"이라는 이름은 사전의 핵심이 될 것이고 값은 dict [곡식] : [5,6, ..]이 될 것입니다. 마찬가지로 는 "코코아는"다른 키가 될 것이며, 값은 DICT [코코아]과 같다 : [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 = ...은 이며 파이썬 3.x에서만 사용 가능합니다.

+1

'value, * keys = ... '구문은 파이썬 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

관련 문제