python - 返回列表字典中的值
问题描述
我正在使用 Python 3.6
我有一个字典列表(如下),并希望为我的数据中的每条记录返回以下值:id
, name
, color
。我似乎无法弄清楚如何遍历数据集中的所有“页面”以返回所有值。我已经了解了for
下面包含的循环,但它只返回第一页的数据,而没有返回其他页面的数据。我正在寻找的最终状态将返回我在for
循环中的结构中的数据,但对于所有页面。
我的数据和 for 循环:
mydict = [
{
"page": 1,
"data":[
{
"id": 11111,
"name": "smith",
"color": "orange",
"subsidiary": "no"
},
{
"id": 22222,
"name": "smith",
"color": "orange",
"subsidiary": "yes",
"subsidiaries": [
{
"id": 33333,
"name": "alpha",
"color": "blue"
},
{
"id": 44444,
"name": "alpha",
"color": "blue"
}
],
"last_updated": 123456789
}
]
},
{
"page": 2,
"data":[
{
"id": 55555,
"name": "smith",
"color": "orange",
"subsidiary": "no"
},
{
"id": 66666,
"name": "smith",
"color": "orange",
"subsidiary": "yes",
"subsidiaries": [
{
"id": 77777,
"name": "alpha",
"color": "blue"
},
{
"id": 88888,
"name": "alpha",
"color": "blue"
}
],
"last_updated": 987654321
}
]
}
]
for i in mydict[0]['data']:
print ({"cust_id": i['id'], "cust_name": i['name'], "fabric_color": i['color']})
回报:
{'cust_id': 11111, 'cust_name': 'smith', 'fabric_color': 'orange'}
{'cust_id': 22222, 'cust_name': 'smith', 'fabric_color': 'orange'}
解决方案
你有一个字典列表,而不是列表字典。所以你可以使用嵌套for
循环:
for d in mydict:
for i in d['data']:
print({"cust_id": i['id'], "cust_name": i['name'], "fabric_color": i['color']})
要将结果存储在字典列表中而不仅仅是打印,您可以附加到列表中:
L = []
for d in mydict:
for i in d['data']:
L.append({"cust_id": i['id'], "cust_name": i['name'], "fabric_color": i['color']})
更有效的是,您可以使用等效的列表推导:
L = [{"cust_id": i['id'], "cust_name": i['name'], "fabric_color": i['color']} \
for d in mydict for i in d['data']]
print(L)
[{'cust_id': 11111, 'cust_name': 'smith', 'fabric_color': 'orange'},
{'cust_id': 22222, 'cust_name': 'smith', 'fabric_color': 'orange'},
{'cust_id': 55555, 'cust_name': 'smith', 'fabric_color': 'orange'},
{'cust_id': 66666, 'cust_name': 'smith', 'fabric_color': 'orange'}]
这是一个捕获辅助数据(如果存在)的示例:
L = []
for d in mydict:
for i in d['data']:
L.append({"cust_id": i['id'], "cust_name": i['name'], "fabric_color": i['color']})
if 'subsidiaries' in i:
for s in i['subsidiaries']:
L.append({"cust_id": s['id'], "cust_name": s['name'], "fabric_color": s['color']})
print(L)
[{'cust_id': 11111, 'cust_name': 'smith', 'fabric_color': 'orange'},
{'cust_id': 22222, 'cust_name': 'smith', 'fabric_color': 'orange'},
{'cust_id': 33333, 'cust_name': 'alpha', 'fabric_color': 'blue'},
{'cust_id': 44444, 'cust_name': 'alpha', 'fabric_color': 'blue'},
{'cust_id': 55555, 'cust_name': 'smith', 'fabric_color': 'orange'},
{'cust_id': 66666, 'cust_name': 'smith', 'fabric_color': 'orange'},
{'cust_id': 77777, 'cust_name': 'alpha', 'fabric_color': 'blue'},
{'cust_id': 88888, 'cust_name': 'alpha', 'fabric_color': 'blue'}]
推荐阅读
- javascript - 如何在 React Native 中有条件地渲染屏幕但将其放置在堆栈上?
- r - 当列高于 R 中的阈值时删除重复的行
- node.js - 如何从 API 的请求正文中获取 Terraform 变量输入
- php - 由于用户未通过身份验证,Laravel 无法验证电子邮件
- python - 有没有办法从 Python 中嵌套 try 块中的链式 raise 中获取原始堆栈跟踪?
- python-3.x - panda 中的新列,基于值的再增量
- python - 形状未知的 Keras 自定义层权重
- python - Meson 安装基于 GObject 的库的 GObject 自省绑定
- c++ - 如何将 TEMPLATE_TEST_CASE 与类型对一起使用?
- python - 托管到 IIS 后出现类型错误:此 COM 对象无法自动执行 makepy 过程 - 请为此对象手动运行 makepy