2014-02-13 1 views
1

이 형식의 데이터가 텍스트 파일에 있습니다. 사전 데이터 구조 내의 사전에서이 콘텐츠를 비밀리에 변환하는 것입니다.두 개 이상의 목록이있는 목록을 압축하려면

('Marks_Subjects', '[시간', '수학', '과학', '영어'], [ '2013-08- 31-16 ', 100, 50, 65], [2013-08-31-17, 90, 50, 65], [2013-08-31-18', 80, 60, 85]])

나는 출력이 원하는 같은 : -

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

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

       'maths':{'2013-08-31-16': {'Subjects': '65'}}} 

등등 17:00에 18:00 너무 여기

는 코드입니다 : -

가 마크 내 제목 및 주제입니다 내 피어 로쓰 그래서
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을 분할합니다. json.loads는 유니 코드 문자열을 파이썬 데이터 구조로 변환합니다. data.zip은 2 개의 목록의 색인을 매핑합니다. 여기에 문제가 있습니다.이 오류가 발생합니다.

ValueError: dictionary update sequence element #0 has length 4; 2 is required 

짐작할 수있는 것은 2 개의 목록 만 압축 할 수 있다는 것입니다. 첫 번째 목록의 색인을 나머지 목록과 함께 ["Time", "Maths", "Science", "English"]으로 압축하고 싶습니다.

그래서 나는 루프는이를 달성하기 위해 실행해야합니다 같아요. 하지만 그렇게하기 위해서는 도움이 필요합니다. 내 '데이터'2 개 목록이있는 경우

는 그냥 잘 작동합니다.

+0

지퍼 (seq1 [seq2 [...]) -> [(seq1 [0] seq2 [0] ...) (.. .)] – Tallmad

+0

정말로 위와 같은 코드를 적절하게 변경해 줄 수 있습니까? 감사합니다 – sam

답변

0
title, data = ('AssetType_FrameDrops ', "[['Time', 'uploaded', 'Unknown', 'captured'], ['2013-08-31-16', 34885, 0, 943640], ['2013-08-31-17', 19167, 0, 1095645], ['2013-08-31-18', 11610, 0, 1005367], ['2013-08-31-19', 4741, 0, 1318737], ['2013-08-31-20', 5829, 0, 1066768], ['2013-08-31-21', 5748, 0, 946647], ['2013-08-31-22', 55554, 0, 900068], ['2013-08-31-23', 70560, 0, 792410]]") 
key1, key2 = title.split("_") 

from ast import literal_eval 
data = literal_eval(data) 
headers, data = data[0], data[1:] 
marks = [dict(zip(headers, items)) for items in data] 

result = {} 
for current_dict in marks: 
    current_time = current_dict["Time"] 
    for k, v in current_dict.items(): 
     if k == "Time": continue 
     if k not in result: result[k] = {} 
     if current_time not in result[k]: result[k][current_time] = {} 
     result[k][current_time][key2] = v 

from pprint import pprint 
result = {key1: result} 
pprint(result) 

출력

{'AssetType': {'Unknown': {'2013-08-31-16': {'FrameDrops ': 0}, 
          '2013-08-31-17': {'FrameDrops ': 0}, 
          '2013-08-31-18': {'FrameDrops ': 0}, 
          '2013-08-31-19': {'FrameDrops ': 0}, 
          '2013-08-31-20': {'FrameDrops ': 0}, 
          '2013-08-31-21': {'FrameDrops ': 0}, 
          '2013-08-31-22': {'FrameDrops ': 0}, 
          '2013-08-31-23': {'FrameDrops ': 0}}, 
       'captured': {'2013-08-31-16': {'FrameDrops ': 943640}, 
          '2013-08-31-17': {'FrameDrops ': 1095645}, 
          '2013-08-31-18': {'FrameDrops ': 1005367}, 
          '2013-08-31-19': {'FrameDrops ': 1318737}, 
          '2013-08-31-20': {'FrameDrops ': 1066768}, 
          '2013-08-31-21': {'FrameDrops ': 946647}, 
          '2013-08-31-22': {'FrameDrops ': 900068}, 
          '2013-08-31-23': {'FrameDrops ': 792410}}, 
       'uploaded': {'2013-08-31-16': {'FrameDrops ': 34885}, 
          '2013-08-31-17': {'FrameDrops ': 19167}, 
          '2013-08-31-18': {'FrameDrops ': 11610}, 
          '2013-08-31-19': {'FrameDrops ': 4741}, 
          '2013-08-31-20': {'FrameDrops ': 5829}, 
          '2013-08-31-21': {'FrameDrops ': 5748}, 
          '2013-08-31-22': {'FrameDrops ': 55554}, 
          '2013-08-31-23': {'FrameDrops ': 70560}}}} 
+0

그것은 나에게 다음과 같은 오류를 제공합니다 : - CURRENT_TIME = current_dict [ "시간"] KeyError를 '시간' – sam

+0

@aman 당신이 당신의 입력 데이터를 보여 주시겠습니까? – thefourtheye

+0

('AssetType_FrameDrops', [[시간 ','업로드 됨 ','알 수 없음 ','캡처 됨 '], [2013-08-31-16', 34885, 0, 943640], [2013-08- 31-17 ', 19167, 0, 1095645], [2013-08-31-18', 11610, 0, 1005367], [2013-08-31-19], 4741, 0, 1318737] 2013-08-31-20 ', 5829, 0, 1066768], [2013-08-31-21', 5748, 0, 946647], [2013-08-31-22 ', 55554, 0, 900068] ], [ '2013-08-31-23', 70560, 0, 792410]]) – sam

관련 문제