如何对具有多个值匹配的列表中的元组进行分组

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)]]