【问题标题】:Converting JSON data into a nested dictionary将 JSON 数据转换为嵌套字典
【发布时间】:2019-02-01 12:21:13
【问题描述】:

我有一个单行的 JSON 文件,其中包含大约 80 个“组”数据,如下所示:

{"Chris": "(597)966-9123", "Bailey": "(311)790-3765"

我有一个如下所示的嵌套字典:

data = {'Name': {},
    'Contact': {}
    }

似乎很清楚,我正在尝试从 JSON 中获取姓名和电话号码,并将它们分类到嵌套字典中的正确键下。但是,我遇到了很多错误。我正在努力解决的主要问题是:

try:
  with open('contacts.json') as file:
    data = json.load(file)
    data['Name'] =
    data['Contact'] =

在 2 个等号中,我尝试过拆分(dict 错误)、用于排序的 for 循环、将数据转换为列表、将数据初始化为其他数据类型。我只是对此感到沮丧,无法弄清楚。

感谢您的帮助,谢谢。

【问题讨论】:

  • 请提供更多符合上述逻辑的代码。
  • 你的最终data 输出不应该是一个列表,而不是一个字典。我的意思是一个字典列表,其中每个项目都有 NameContact 键。如果是这样,您可以通过列表推导轻松做到这一点。
  • json.loads() 将帮助您将 JSON 转换为字典,但首先您必须通过 import json 导入 JSON 模块

标签: python json python-3.x


【解决方案1】:

我猜以下可能会起作用

data = json.loads(file)
all_data = {
    'Name': [],
    'Contact': []
}
for name, contact in data.items():
    all_data['Name'].append(name)
    all_data['Contact'].append(contact)
print(all_data)

输出将是:

{'Name': ['Chris', 'Bailey'], 'Contact': ['(597)966-9123', '(311)790-3765']}

【讨论】:

  • 那是我正在寻找的确切输出,但是我得到了 AttributeError: 'dict' object has no attribute 'append' 编辑:我错过了在 all_data 中将大括号更改为正方形。我很困惑这是否仍被视为字典对象,但输出是正确的。
【解决方案2】:

字典不应该保持秩序:)。好吧,也许在 3.7 中它真的保留了它。但是你真的使用正确的数据结构吗? 也许你想要一个嵌套列表而不是嵌套字典。

试试这个:

>>> with open('Contacts.json', 'r') as file_:
...   x = json.load(file_)

>>> x = {"Chris": "(597)966-9123", "Bailey": "(311)790-3765"}
>>> d = {'Name': [], 'Contact': []}
>>> for key, val in x.items():
...   d['Name'].append(key)
...   d['Contact'].append(val)
... 
>>> d
{'Name': ['Chris', 'Bailey'], 'Contact': ['(597)966-9123', '(311)790-3765']}

您当然可以为NameContact 使用OrderedDict,但是您有吗?

或者你只是想要,

>>> sorted(x.items(), key=lambda x: (x[0], x[1]))
[('Bailey', '(311)790-3765'), ('Chris', '(597)966-9123')]
>>> sorted(x.items(), key=lambda x: (x[0], x[1]), reverse=True)
[('Chris', '(597)966-9123'), ('Bailey', '(311)790-3765')]

【讨论】:

  • 我不关心字典保持顺序,我只希望名称进入我的嵌套字典中的姓名键和联系人键中的电话。使用 JSON 可以吗?
【解决方案3】:

如果我的评论中的问题尚未得到答复,我将发布此消息作为获取字典列表的一种方式:

with open('contacts.json') as file:
  data = json.load(file)
  new_data = [{"Name": name, "Contact": contact} for (name, contact) in data.items()]

【讨论】:

    猜你喜欢
    • 2021-12-21
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 2015-08-25
    • 2021-11-28
    • 2022-01-07
    相关资源
    最近更新 更多