2015-11-17 5 views
1

я имею следующий список: parent_child_list с идентификатором кортежами:Python получить второе значение кортежа в списке

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

Пример: Я хотел бы напечатать те значения, которые объединены с идентификатором 960. Те бы быть: 965, 988

Я попытался преобразовать список в Словаре:

rs = dict(parent_child_list) 

Потому что теперь я мог бы просто сказать:

print rs[960] 

Но, к сожалению, я забыл, что ДИКТ не может иметь двойные значения, чтобы вместо того, чтобы получать 965, 988 в качестве ответа я получить только 965.

Есть ли простой вариант, чтобы сохранить двойные значения?

Большое спасибо

ответ

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) 
+0

совершенный. благодаря – Constantine

1

Вы можете использовать список понимание построить list, используя if отфильтровать соответствующие идентификаторы:

>>> parent_child_list = [(960, 965), (960, 988), (359, 364), (359, 365)] 
>>> [child for parent, child in parent_child_list if parent == 960] 
[965, 988] 
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) 
0

Список понимание

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

даст вам список у значений для кортежей, значения х равны 960.

0

Вы дали способ извлечения индивидуума, используя список понимание или цикл, но вы можете создать словарь, который вы желаете для всех значений:

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

Альтернатива с использованием исходного питона Dict, вы могли бы использовать collections.defaultdict(list) и только непосредственно append, например, d[parent].append(child)

Смежные вопросы