从元组列表中提取不同的值

Raz*_*zer 3 python tuples list

如何从以下元组列表中提取不同值的列表?

tuple = ((("test", 123), ("test", 465), ("test", 8910), ("test2", 123)))
Run Code Online (Sandbox Code Playgroud)

我想得到一个列表:

different_values = ("test", "test2")
Run Code Online (Sandbox Code Playgroud)

现在我想通过这个"键"访问所有值并通过列表获取它们:

test_values = (123, 456, 8910)
test2_values = (123)
Run Code Online (Sandbox Code Playgroud)

怎么做?

Sve*_*ach 11

我将您的数据转换为列表字典:

d = {}
for k, v in tuples:
    d.setdefault(k, []).append(v)
Run Code Online (Sandbox Code Playgroud)

现在,您可以访问键作为d.keys()和值的列表每个键kd[k].

(很快,有人会向前迈进并声称defaultdict对此更好.不要听他们,在这种情况下根本没关系.)

  • @unutbu:对于`defaultdict`,每个单键查找都可以创建一个新密钥.在这种情况下,您只想在上面给出的循环中创建新密钥 - 如果密钥不存在,所有后续查找都将失败.所以我会使用`defaultdict`如果*all*look-ups应该添加不存在的键,而不仅仅是一些.否则,我更喜欢明确可能会改变字典的查找.我可能会考虑`defaultdict`的另一种情况是,默认值的构造函数是否昂贵.上面的代码在每次迭代中都会创建一个空列表,即使它不需要也是如此.... (3认同)