python - python:对字典项目列表的字典列表的列表理解
问题描述
我知道这是一个最糟糕的标题,但让我通过示例来解释这个问题。我的数据是:
data = [
{
"subdata": [ # subdata various number of dictionaries of same keys, including "ext_id", ...
{
"ext_id": "12345", # ... but of different values
...
},
{
"ext_id": "54321",
...
}
],
...
},
... # and many other dictionary items with "subdata", which in turn contains
# a list of dictionaries containing "ext_id" and corresponding values
]
我的目标是列出“子数据”中的一对“ext_id”,即
goal = [
("12345", "54321"),
(...)
]
我知道这个目标可以使用 for 循环,但想知道列表推导是否可行?我试过这个:
goal = [x["ext_id"] for y in data for x in y["subdata"]]
得到一个扁平版本的目标["12345", "54321", ...]
而不是二维列表。
任何建议表示赞赏。
解决方案
如果你有这样的数据结构:
data = [
{
"subdata": [
{
"ext_id": "12345",
},
{
"ext_id": "54321",
}
],
},
{
"subdata": [
{
"ext_id": "98765",
},
{
"ext_id": "56789",
}
],
}
]
然后要获得您想要的输出,您可以使用列表推导(以及生成器推导),如下所示:
goal = [tuple(dict_['ext_id'] for dict_ in subdata['subdata']) for subdata in data ]
goal
将包含:
[('12345', '54321'), ('98765', '56789')]
推荐阅读
- excel - 如何让 Application.SendKeys "{TAB}" 运行?我正在尝试在表单填写应用程序中使用它
- unit-testing - Kafka Streams:流线程未能锁定状态目录
- java - 无法与 Vertx 服务器和客户端创建 SSL 连接
- android - 升级到最新的 SDK 版本 1.20.4 后运行/调试 Flutter 应用程序非常慢
- postgresql - PostgreSQL 中表的单独输入/输出类型
- command-line - 如何使用 jq 命令从文件内容创建表
- python - 谷歌分析 api 每次都崩溃
- sql - 连续编号的值组(包括重复)
- java - Java 编译器只考虑第一个数字
- angular - 设置多个验证器 - Angular Reactive Form