python-3.x - 如何对具有多个匹配值的列表中的元组进行分组
问题描述
我想尽可能有效地对具有多个公共值的元组列表进行分组。我知道这样做的漫长方法,但想知道更快更“Pythonic”的方法会是什么。
我想要达到的目标:
lst = [('a', '1', 1),
('a', '1', 2),
('a', '2', 2),
('b', '1', 1),
('c', '1', 1)]
result = [
[('a', '1', 1), ('a', '1', 2)],
[('a', '2', 1)],
[('b', '1', 1)]
[('c', '1', 1)]
]
理想情况下,我想要得到的真实结果是:
result = [
[('a', '1', 1), ('a', '1', 2)],
]
如果没有匹配的对,那么它会排除它们,但我想我可以做到这一点set()
解决方案
使用dict.setdefault
前任:
r = {}
for i in lst:
r.setdefault((i[0], i[1]), []).append(i) #key -> First 2 values
print(list(r.values()))
#OR print([i for i in r.values() if len(i) > 1])
输出:
[[('a', '1', 1), ('a', '1', 2)],
[('a', '2', 2)],
[('b', '1', 1)],
[('c', '1', 1)]]
推荐阅读
- java - 文件 I/O,使用构造函数变量创建路径
- xamarin - 创建一个活动以提供多个选项以供选择
- c# - WPF 自定义控件的数据绑定不起作用
- c# - sdk 项目中的 Msbuild 15 引发错误:该元素
元素下方 无法识别 - javascript - 根据变量的长度将随机数推送到数组
- c# - PrincipalContext.ValidateCredentials 因“服务器无法处理目录请求”而失败。
- sql - PostgreSQL查询返回非Unicode字符串(波斯语)?
- spring - 使用 JsonFactory.Feature 设置在 Spring Boot 中配置 Jackson ObjectMapper
- flutter - 从(标题?)栏(不是应用栏)更改颤振图标
- python - Panda/PyPlot 使 X 轴线出现