python-3.x - 如何从列表中的嵌套字典对象中提取选定的键和值?
问题描述
我有一个example_list
包含两个 dict 对象的列表,它看起来像这样:
[
{
"Meta": {
"ID": "1234567",
"XXX": "XXX"
},
"bbb": {
"ccc": {
"ddd": {
"eee": {
"fff": {
"xxxxxx": "xxxxx"
},
"www": [
{
"categories": {
"ppp": [
{
"content": {
"name": "apple",
"price": "0.111"
},
"xxx: "xxx"
}
]
},
"date": "A2020-01-01"
}
]
}
}
}
}
},
{
"Meta": {
"ID": "78945612",
"XXX": "XXX"
},
"bbb": {
"ccc": {
"ddd": {
"eee": {
"fff": {
"xxxxxx": "xxxxx"
},
"www": [
{
"categories": {
"ppp": [
{
"content": {
"name": "banana",
"price": "12.599"
},
"xxx: "xxx"
}
]
},
"date": "A2020-01-01"
}
]
}
}
}
}
}
]
现在我想过滤项目,只保留"ID": "xxx"
和对应的值"price": "0.111"
,预期结果可能类似于:
[{"ID": "1234567", "price": "0.111"}, {"ID": "78945612", "price": "12.599"}]
或类似的东西{"1234567":"0.111", "78945612":"12.599" }
这是我尝试过的:
map_list=[]
map_dict={}
for item in example_list:
#get 'ID' for each item in 'meta'
map_dict['ID'] = item['meta']['ID']
# get 'price'
data_list = item['bbb']['ccc']['ddd']['www']
for data in data_list:
for dataitem in data['categories']['ppp']
map_dict['price'] = item["content"]["price"]
map_list.append(map_dict)
print(map_list)
结果看起来不正确,感觉项目没有正确迭代,它给了我结果:
[{"ID": "78945612", "price": "12.599"}, {"ID": "78945612", "price": "12.599"}]
它给了我第二个 ID 的重复结果,但第一个 ID 在哪里?有人可以帮我看看吗,谢谢。
更新:从另一个问题的一些评论中,我了解输出一直被覆盖的原因是因为其中的键名dict
始终相同,但我不知道如何解决这个问题,因为需要提取键和值来自不同级别的 for 循环,任何帮助将不胜感激,谢谢。
解决方案
map_dict
正如@Scott Hunter 所提到的,每次尝试执行此操作时都需要创建一个新的。这是您解决方案的快速修复(遗憾的是,我现在无法对其进行测试,但对我来说似乎是正确的)。
map_list=[]
for item in example_list:
# get 'price'
data_list = item['bbb']['ccc']['ddd']['www']
for data in data_list:
for dataitem in data['categories']['ppp']:
map_dict={}
map_dict['ID'] = item['meta']['ID']
map_dict['price'] = item["content"]["price"]
map_list.append(map_dict)
print(map_list)
但是你在这里做的是你基本上只是“强迫”你通过......我建议你休息一下并查看某种教程,这将帮助你了解它在后端的真正工作原理. 这就是我写它的方式:
list_dicts = []
for example in example_list:
for www in item['bbb']['ccc']['ddd']['www']:
for www_item in www:
list_dicts.append({
'ID': item['meta']['ID'],
'price': www_item["content"]["price"]
})
祝你好运,希望对你有帮助:)
推荐阅读
- c# - 如何将图像接收到 xamarin android?
- r - 在 R 中使用 dplyr 按组计算平均值
- firebase - firebase glob 匹配根目录和所有目录
- java - 当我写关键字时,它没有在 android studio 中显示任何选项
- apache-superset - 有没有办法锁定查询并只允许用户更改参数?
- php - 如何修复数量输入字段不影响单个产品页面woocommerce上的其他数量输入字段?
- c# - EF Core 自动将 ulong 转换为 long
- fluid - VHS - 如何获取表格列的字段值
- mysql - 在'declare exists_check int'附近使用错误的语法
- android - Android XYPlot 控制标签位置,因此它们可能不会与数据的开头对齐