【问题标题】:how to create Dictionary within a dictionary in python如何在python中的字典中创建字典
【发布时间】:2014-03-10 16:40:50
【问题描述】:

我在一个文本文件中有这种格式的数据。 我想要的只是在字典数据结构中的字典中隐藏此内容

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

这里是代码sn-p:-

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()}}

模块2()

我拆分标题 Marks_Subjects 以便 Marks 是我的 Title,Subjects 是我的 sub_title。 json.loads 将 unicode 字符串转换为 python 数据结构 data.zip 映射 2 个列表的索引。 这里的问题是我收到了这个错误

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

我猜这意味着 zip 函数只能压缩 2 个列表。我想将 ["Time", "Maths", "Science", "English"] 的第一个列表的索引与其余列表一起压缩。

所以我想必须运行一个循环才能实现这一点。但我需要一些帮助。

如果我的“数据”中有 2 个列表,那么它就可以正常工作。

【问题讨论】:

  • 到目前为止你尝试过什么?你被困在哪里了?请更具体地说明您的问题。
  • 我只卡在开头。我所拥有的只是将上述内容保存在文本文件中,我必须将其转换为字典。因为我是 python 新手。我有点卡住从哪里开始,因为我无法弄清楚如何摆脱“_”,以便将标记和主题视为分开。你能提供任何帮助吗?谢谢:)

标签: python


【解决方案1】:
>>> 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}}}}

我必须说这个数据结构没有意义。

【讨论】:

  • 如果里面有 9 个列表而不是 2 个呢?
  • 嘿,伙计,现在我在数据中拥有超过 1 个列表。 zip 如何将第一个列表的索引与其余列表映射?谢谢
  • @aman zip 只是从每个列表中获取 n 元素并从中创建一个元组。 dict 将从包含两个元素的元组的列表中创建一个字典。如果有多个输入列表,这将导致一个大小等于输入列表数量的元组(在您的情况下为 9)。除此之外,不要叫我“伙伴”,这听起来很丢脸。
猜你喜欢
  • 1970-01-01
  • 2019-08-07
  • 2014-03-03
  • 2019-03-01
  • 2023-03-15
  • 2021-06-25
  • 2017-05-05
  • 2016-07-11
  • 1970-01-01
相关资源
最近更新 更多