python - 在python中导入2个字典列表和嵌套键/值对
问题描述
我有 2 个 json,它们是我想用来在 python 中创建第三个 json 的字典列表。
第一个 json 是last_names.json
[{
"lastnameID": "1",
"name": "Doe"
}, {
"lastnameID": "2",
"name": "Smith"
}]
第二个 json 是first_names.json
[{
"firstnameID": "1",
"name": "John",
"lastnameID": "1"
}, {
"firstnameID": "2",
"name": "Jane",
"lastnameID": "1"
}, {
"firstnameID": "3",
"name": "Bob",
"lastnameID": "2"
}, {
"firstnameID": "4",
"name": "Mary",
"lastnameID": "2"
}]
我希望我的输出是这个output.json
[{
"lastnameID": "1",
"name": "Doe",
"first names": [{
"firstnameID": "1",
"name": "John"
}, {
"firstnameID": "2",
"name": "Jane"
}]
}, {
"lastnameID": "2",
"name": "Smith",
"first names": [{
"firstnameID": "3",
"name": "Bob"
}, {
"firstnameID": "4",
"name": "Mary"
}]
}]
我怎样才能在 python 3 上做到这一点?
我在下面尝试过,但必须有比这更好的方法
import json
finaljson = []
with open('first_names.json', 'r') as f:
firstnames = json.load(f)
with open('last_names.json', 'r') as f:
lastnames = json.load(f)
for i in range (0, len (lastnames)):
firstnamelist = []
lastnameID = lastnames[i]['lastnameID']
lastname = lastnames[i]['name']
for i in range (0, len (firstnames))
if firstnames[i]['lastnameID'] == lastnameID:
firstname = firstnames[i]['name']
firstnameID = firstnames[i]['firstnameID']
firstnamelist.append("firstnameID":firstnameID,"name":firstname)
finaljson.append({"lastnameID":lastnameID,"name":lastname,"firstnames":firstnamelist})
解决方案
字典内
for first_ in first:
first_['first names'] = [{x:y for x, y in second_.items() if x == 'firstnameID' or x == 'name'}
for second_ in second if second_['lastnameID'] == first_['lastnameID']]
print (first)
请看以下结果:
[{'lastnameID': '1', 'name': 'Doe',
'first names': [{'firstnameID': '1', 'name': 'John'},
{'firstnameID': '2', 'name': 'Jane'}]},
{'lastnameID': '2', 'name': 'Smith',
'first names': [{'firstnameID': '3', 'name': 'Bob'},
{'firstnameID': '4', 'name': 'Mary'}]}]
推荐阅读
- rollup - 如何在 rollup 中分别设置不同文件的打包文件名
- python-3.x - "else" 给出无效的语法输出。为什么?
- python - 如何使 VSCode 集成终端运行与 Terminal.app 相同的 Conda Python 解释器?
- c - 指向 2d int 数组的指针与指向 2d char a 的指针。区别对待
- python - 读取未知和可变长度的串行数据字节的一般程序
- binary - 我有一个关于有符号二进制计算的问题
- npm - 材料设计 - 入门 - 错误
- sql - SQL 字符串模式匹配
- swift - MacOS 上的 SwiftUI。- 打开一个新窗口
- c# - 在 VB.NET 中共享 C# 类和静态变量 insde 相同的解决方案