转换JSON数据到嵌套字典

时间:2019-02-01 12:21:14

标签: python json python-3.x

我有一个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个等号我试图分裂(字典错误),for循环排序,转换数据以列表,初始化数据到其它数据类型。我对此感到沮丧,无法解决。

我感谢所有帮助,谢谢。

3 个答案:

答案 0 :(得分: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']}

答案 1 :(得分:1)

不应该保持顺序:)。好吧,也许在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']}

您当然可以为OrderedDictName使用Contact,但是可以吗?

或者也许你只是想要

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

答案 2 :(得分:0)

在我的评论中尚未答复该问题的情况下,我将其发布为获取字典列表的一种方式:

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