2014-02-12 2 views
-6

이 형식의 데이터가 텍스트 파일에 있습니다.python 사전에서 사전을 만드는 방법

다음
{'Marks': {'maths': {'2013-08-31-16': {'Subjects': '100'}}, 

       'Science':{'2013-08-31-16': {'Subjects': '50'}}, 

       'maths':{'2013-08-31-16': {'Subjects': '65'}}} and so on for 17:00 and 18:00 too 

코드 조각입니다 : - -이 : 내가 원하는 건 처럼 I 출력이 원하는

('Marks_Subjects ', "[['Time', 'maths', 'Science', 'english'], ['2013-08-31-16', 100, 50, 65], ['2013-08-31-17', 90, 50, 65], ['2013-08-31-18', 80, 60, 85]]") 

사전 데이터 구조 내에서 사전에이 내용을 은밀한 것입니다

import sys 
import json 
def module2(): 
    title, data = ('Marks_Subjects ', "[['Time', 'maths', 'Science','english'],['2013-08-31-16', 100, 50, 65], ['2013-08-31-17', 90, 50, 65],['2013-08-31-18', 80, 60, 85]]") 
    title, sub_title = title.split('_') 
    data = json.loads(data.replace("'", '"')) 
    data = dict(zip(*data)) 
    date = data.pop('Time') 
    #for subject, value in data.iteritems(): 
    print {title: {subject: {date: {sub_title: value}} for subject, value in data.iteritems()}} 

module2()

Marks_Subjects 제목을 분리하여 Marks 내 제목이고 제목은 내 하위 제목입니다. json.loads는 유니 코드 문자열을 파이썬 데이터 구조로 변환합니다. data.zip은 2 개의 목록의 색인을 매핑합니다. 여기에 문제가 있습니다.이 오류가 발생합니다.

ValueError : 사전 업데이트 시퀀스 요소 # 0의 길이가 9입니다. 2가 필요합니다.

나는 우편 번호 기능이 2 개의 목록 만 압축 할 수 있다는 것을 의미합니다. 나머지 목록과 함께 [ "시간", "수학", "과학", "영어"] 인 첫 번째 목록의 색인을 압축하고 싶습니다.

그래서이 작업을 수행하려면 루프를 실행해야합니다. 하지만 그렇게하기 위해서는 도움이 필요합니다.

'데이터'에 2 개의 목록이있는 경우 제대로 작동합니다.

+3

지금까지 해보신 것은 무엇입니까? 어디서 붙어 있니? 문제와 관련하여 구체적으로 설명해주십시오. –

+0

나는 처음에만 붙어있다. 내가 갖고있는 것은 위의 내용을 텍스트 파일에 저장 한 것으로 사전으로 변환해야합니다. 이후 나는 파이썬을 처음 사용합니다. 마크와 과목이 분리 되어질 수 있도록 '_'을 없애는 방법을 알아낼 수 없기 때문에 나는 어디에서 시작해야 할까? 어떤 도움을 줄 수 있습니까? 감사합니다 :) – sam

답변

0
>>> import json 
>>> title, data = ('Marks_Subjects ', "[['Time', 'maths', 'Science', 'english'], ['2013-08-31-16', 100, 50, 65]]") 
>>> title, sub_title = title.split('_') # Split 'Mark' and 'Subjects' 
>>> data = json.loads(data.replace("'", '"')) # Deserialize the data list 
>>> data = dict(zip(*data)) # make a dict of the two lists 
>>> date = data.pop('Time') # Extract the date 
>>> # Create a dict using a comprehension. 
... 
>>> {title: {subject: {date: {sub_title: mark}} 
... for subject, mark in data.iteritems()}} 
{'Marks': {'maths': {'2013-08-31-16': {'Subjects ': 100}}, 'Science': {'2013-08-31-16': {'Subjects ': 50}}, 'english': {'2013-08-31-16': {'Subjects ': 65}}}} 

나는이 데이터 구조가 의미가 없다고 말해야한다.

+0

2 대신 9 개의 목록이있는 경우 어떻게됩니까? – sam

+0

안녕 친구, 이제 데이터 안에 두 개 이상의 목록이 있습니다. zip은 첫 번째 목록의 색인을 나머지 목록과 어떻게 매핑합니까? 감사합니다. – sam

+0

@aman'zip'은 각리스트에서'n' 요소를 취해서 그것으로부터 튜플을 만듭니다. 'dict'은 두 요소의 튜플을 포함하는 목록에서 사전을 생성합니다. 입력 목록이 여러 개있는 경우 입력 목록 수와 동일한 크기의 튜플이 생깁니다 (사례 9). 이걸 제외하고는, 나를 "짝"이라고 부르지 마라. – siebz0r

관련 문제