如何对具有多个值匹配的列表中的元组进行分组
How to group tuples in a list with multiple values matching
我想尽可能高效地对具有多个公共值的元组列表进行分组。我知道这样做的漫长方法,但想知道有什么更快、更“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)]]
我想尽可能高效地对具有多个公共值的元组列表进行分组。我知道这样做的漫长方法,但想知道有什么更快、更“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)]]