python获取列表中元组的第二个值

时间:2015-11-17 13:54:43

标签: python list dictionary key tuples

我有以下列表:parent_child_list,带有id-tuples:

[(960, 965), (960, 988), (359, 364), (359, 365), 
(361, 366), (361, 367), (361, 368), (361, 369), 
(360, 370), (360, 371), (360, 372), (360, 373), (361, 374)]

示例:我想打印那些与id 960结合的值。那些将是:965,988

我试图将列表转换为字典:

rs = dict(parent_child_list)

因为现在我可以简单地说:

print rs[960]

但遗憾的是我忘记了dict不能有双重值,所以不是得到965,988作为答案我只收到965。

是否有任何简单的选项可以保留双倍值?

非常感谢

5 个答案:

答案 0 :(得分:3)

您可以使用defaultdict创建字典,将列表作为其值类型,然后附加值。

from collections import defaultdict
l = [(960, 965), (960, 988), (359, 364), (359, 365), (361, 366), (361, 367), (361, 368), (361, 369), (360, 370), (360, 371), (360, 372), (360, 373), (361, 374)]

d = defaultdict(list)

for key, value in l:
    d[key].append(value)

答案 1 :(得分:1)

您可以使用列表推导来构建list,使用if过滤掉匹配的ID:

>>> parent_child_list = [(960, 965), (960, 988), (359, 364), (359, 365)]
>>> [child for parent, child in parent_child_list if parent == 960]
[965, 988]

答案 2 :(得分:0)

你总是可以迭代:

parent_child_list = [(960, 965), (960, 988), (359, 364), (359, 365),
(361, 366), (361, 367), (361, 368), (361, 369),
(360, 370), (360, 371), (360, 372), (360, 373), (361, 374)]

for key, val in parent_child_list:
    if key == 960:
        print str(val)

答案 3 :(得分:0)

列表理解

[y for (x, y) in parent_child_list if x == 960]

将为您提供x值等于960的元组的y值列表。

答案 4 :(得分:0)

您已经获得了使用列表推导或循环提取个体的方法,但您可以为所有值构建所需的词典:

>>> d = {}
>>> for parent, child in parent_child_list:
...     d.setdefault(parent, []).append(child)
>>> d[960]
[965, 988]

使用原始python dict的替代方法,您可以使用collections.defaultdict(list)并直接使用append,例如d[parent].append(child)