2014-02-12 160 views
-6

我在這個文本文件中有這種格式的數據。 所有我想要的是一本字典的數據結構中隱蔽在字典此內容如何在Python中的字典中創建字典

('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]]") 

我所要的輸出是這樣的: -

{'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 

這裏是代碼片段: -

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,以便標記是我的標題和主題是我的sub_title。 json.loads將unicode字符串轉換爲python數據結構 data.zip映射2個列表的索引。 這裏的問題是我得到這個錯誤

ValueError:字典更新序列元素#0的長度爲9; 2是必需的

我想這意味着zip函數只能壓縮2個列表。我想將第一個列表的索引與其餘列表壓縮爲[「時間」,「數學」,「科學」,「英語」]。

所以我想一個循環必須運行才能實現這一點。但我需要一些幫助。

如果我在我的'數據'中有2個列表,那麼它工作得很好。

+3

到目前爲止您嘗試過什麼?你卡在哪裏?請更具體地處理您的問題。 –

+0

我被困在一開始只。我所擁有的就是將上述內容保存在文本文件中,我必須將其轉換爲字典。由於我是python的新手。我有點卡在從哪裏開始,因爲我無法弄清楚如何擺脫'_',因此標記和主題被認爲是分開的。你能提供任何幫助嗎?謝謝:) – 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

如果裏面有9個列表而不是2個,那該怎麼辦? – sam

+0

嘿夥計,現在我有超過1個列表裏面的數據。 zip將如何將第一個列表的索引與其餘列表進行映射?謝謝 – sam

+0

@aman'zip'只需從每個列表中取出'n'元素並從中創建一個元組。 'dict'將從包含兩個元素的元組的列表中創建一個字典。如果有多個輸入列表,這將導致一個大小等於輸入列表數量的元組(在你的情況9中)。除此之外,不要稱我爲「配偶」,這聽起來有些貶低。 – siebz0r