我有一个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循环排序,转换数据以列表,初始化数据到其它数据类型。我对此感到沮丧,无法解决。
我感谢所有帮助,谢谢。
答案 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']}
您当然可以为OrderedDict
和Name
使用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()]