python-3.x - python:基于相似键的dict groupby列表然后过滤
问题描述
我有一个字典列表,例如:
data = [
{'11': {'x': 333, 'priority': 1, 'channels': 40}},
{'11': {'x': 444, 'priority': 2, 'channels': 30}},
{'22': {'x': 000, 'priority': 1, 'channels': 55}}
]
我想对具有相似键的 dict 元素进行分组,例如:
[
[{'11': {'x': 333, 'priority': 1, 'channels': 40}},
{'11': {'x': 444, 'priority': 2, 'channels': 30}}],
[{'22': {'x': 000, 'priority': 1, 'channels': 55}}]
]
priority
如果 group-by 列表中包含超过 1 个元素,则在 key 上过滤 dict 元素。
期望输出:
[
{'11': {'x': 333, 'priority': 1, 'channels': 40}},
{'22': {'x': 000, 'priority': 1, 'channels': 55}}
]
解决方案
你可以试试
from collections import defaultdict
res = defaultdict(list)
for i in data:
res[list(i.keys())[0]].append(i)
print([min(i, key=lambda x: list(x.values())[0]['priority']) for i in res.values()])
输出
[{'11': {'x': 333, 'priority': 1, 'channels': 40}}, {'22': {'x': 0, 'priority': 1, 'channels': 55}}]
将defaultdict
聚合具有相同键的所有字典,然后与min
函数的列表比较将按最小优先级返回字典。
推荐阅读
- python - pandas 按 Q1 和 Q3 分组
- ffmpeg - ffmpeg 使用英特尔快速同步视频硬件加速解码将网络摄像头流编码和解码为 h264 文件
- excel - 将名称分配给从一个工作簿到另一个工作簿的范围
- python - 如何按单词拆分字符串列表并将其转换为子列表?
- hyperledger-fabric - 运行 hyperledger fabric java gateway 示例代码抛出 The gateway identity must be set
- python - 我可以拦截 pytest 的命令行参数吗?
- android - 在 Android 中添加 Firebase Crashlytics 时生成同步错误
- python - pytest / django:多个夹具,多个断言,断言期望
- angular - 使用角度过滤管的基于列的搜索
- javascript - 我无法根据 backendvalue 修复 ReactNativeToggle Button