2014-11-23 4 views
1

Я использую библиотеку GraphViz, и в некоторых случаях он перенастраивает мне словарь с кортежем в качестве ключей.Работа с кортежами в качестве словарных клавиш

{(4, 7): 0, (2, 6): 1, (10, 4): 1, (5, 11): 1, (4, 5): 1, 
(2, 8): 0, (8, 11): 0, (10, 0): 1, (6, 11): 1, (9, 11): 1, 
(1, 9): 0, (10, 1): 0, (7, 11): 1, (0, 9): 1, (3, 7): 1, 
(10, 3): 1, (10, 2): 1} 

По какой-то причине, я хотел бы получить второе число в кортежах где: первое число == 10 и значение == 1

я пробовал для доступа к словарю с (10,), но я думаю, что этот синтаксис не разрешен в python.

ответ должен быть: [4 ,0 ,3 , 2]

+2

'1' не должен быть частью результатов, не так ли? –

+0

да, спасибо :) –

ответ

6

Вам придется перебрать словарь, например .:

In [1]: d = {(4, 7): 0, (2, 6): 1, (10, 4): 1, (5, 11): 1, (4, 5): 1, 
    ...: (2, 8): 0, (8, 11): 0, (10, 0): 1, (6, 11): 1, (9, 11): 1, 
    ...: (1, 9): 0, (10, 1): 0, (7, 11): 1, (0, 9): 1, (3, 7): 1, 
    ...: (10, 3): 1, (10, 2): 1} 

In [2]: [b for (a, b), v in d.items() if a == 10 and v == 1] 
Out[2]: [4, 0, 3, 2] 
1
result=[] 
for key in your_dict.keys(): 
    if key[0]==10 and your_dict[key]==1: 
    result.append(key[1]) 
1

(10,) является вполне допустимым синтаксисом, но это поднимет KeyError здесь. Чтобы получить желаемый результат, вам нужно будет использовать цикл здесь:

>>> d = {(4, 7): 0, (2, 6): 1, (10, 4): 1, (5, 11): 1, (4, 5): 1, 
... (2, 8): 0, (8, 11): 0, (10, 0): 1, (6, 11): 1, (9, 11): 1, 
... (1, 9): 0, (10, 1): 0, (7, 11): 1, (0, 9): 1, (3, 7): 1, 
... (10, 3): 1, (10, 2): 1} 
>>> [k[1] for k, v in d.items() if k[0] == 10 and v == 1] 
[4, 0, 3, 2] 
Смежные вопросы