2014-02-12 52 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