2014-02-06 3 views
1

에 사전 내에서 사전을 얻을 : -어떻게 형식의 텍스트 파일의 데이터가 아래 내가 한 파이썬

Monday  Maths 100 95 65 32 23 45 77 54 78 88 45 67 89 
Tuesday Science 45 53 76 78 54 78 34 99 55 100 45 56 78 
Wednesday English 43 45 56 76 98 34 65 34 45 67 76 34 98 
나는이 같은 출력 뭔가를 생성합니다 파이썬 코드를 작성하려는

을 - 여기

{ 
'monday': {'maths': [100 95 65 32 23 45 77 54 78 88 45 67 89}, 
'tuesday': {'Science':45 53 76 78 54 78 34 99 55 100 45 56 78}, 
'Wednesday': {'English': 43 45 56 76 98 34 65 34 45 67 76 34 98} 
} 

은 조각이다 :

fo = open('C:\\Users\\aman\\Documents\\dataVal.txt','r') 
data = fo.readlines() 

mydict = {} 
li = [] 
for i in range(len(data)): 
    row = data[i].split('\t') 
    timeKey = row[0] 
    type = row[1] 
    if mydict.has_key(timeKey): 
     li = mydict[timeKey] 
     li.append(type) 
     mydict[timeKey] = li 
    else: 
     li = [] 
     li.append(type) 
     mydict[timeKey] = li 
print mydict 

목 {: [ '수학', '과학', '영어'] '월요일'}

하지만 위에서 언급 한 출력을 원하는

- :처럼 나에게 출력을 제공합니다.

누군가 도움을 줄 수 있습니까?

+3

작동하지 않는 것을 시도 했습니까? 사람들이 당신을 도울 수 있도록 귀하의 시도를 게시하십시오. StackOverflow는 코드 작성 서비스가 아닙니다. 월요일 중간에 –

+0

: {} 또는 [] ?? 사전이어야하고 수학은 핵심 권리 여야합니다. –

+0

예 저는 월요일이 열쇠이고 수학이 그 가치가되고 수학이 열쇠가되고 그 가치가되는 표가되기를 바랍니다. 마찬가지로, 화요일은 열쇠가되고 과학은 그 가치가되고 과학은 열쇠가되고 수요일은 그 가치와 가치가됩니다. 그래서 내 코드를 사용하여 월요일과 월요일, 수학, 과학, 영어를 가치로 삼았으나 지금은 수학, 과학, 영어 각각의 가치로 표시를 추가하고 싶습니다 – sam

답변

0

여기 내 솔루션입니다 :

dic = dict() 
    with open('txt', 'r') as fh: 
    for l in fh.readlines(): 
      try: 
       lines = l.split() 
       day, sub, num = lines[0], lines[1], [int(x) for x in lines[2:]] 
       dic.setdefault(day, {}) 
       dic[day][sub] = num 
      except Exception as er: 
       print er 
    print dic 

출력 :

{'Tuesday': {'Science': [45, 53, 76, 78, 54, 78, 34, 99, 55, 100, 45, 56, 78]}, 
    'Wednesday': {'English': [43, 45, 56, 76, 98, 34, 65, 34, 45, 67, 76, 34, 98]}, 
    'Monday': {'Maths': [100, 95, 65, 32, 23, 45, 77, 54, 78, 88, 45, 67, 89]}} 

가 당신을 위해 작동하는지 알려주세요.

+1

예. 고마워. – sam

+0

죄송합니다. 한 번 더 질문드립니다. 월요일, 화요일 및 수요일 대신에 나는 각각 16:00, 17:00 및 18:00이라고 말합니다. 이 경우, 기수 10 인 '16 : 00 : 00 '의 int()에 대해 유효하지 않은 리터럴을 말하는 오류가 발생합니다. '10 : 16 : 00 : 00'의 int()에 대한 리터럴이 유효하지 않습니다. int 10 (16 진수) : '16 : 00 : 00 ' {} – sam

+0

데이터 구조를 변경해야 할 수도 있습니다. –

관련 문제