2015-12-21 3 views
0

Ниже приведен словарь образца с несколькими ключами на массив значений:Как получить доступ к нескольким словарным клавишам внутри цикла?

test_dict = {('CA', 1): [1,2,3,4], ('MT', 45): [5,6,7,8]} 

Я хотел бы ожидать, что цикл по клавишам с itertools даст кортежи:

import itertools 

for key, value in test_dict.iteritems(): 
    print key 

Тем не менее, это дает первое элемент в каждом кортеже

MT 
CA 

Как я могу получить доступ к кортежу в каждой итерации, но по-прежнему имеют доступ к значениям, F или пример:

('CA', 1) 
('MT', 45) 

Моя конечная цель - уметь индексировать кортеж в каждой итерации. Например, в этом примере я бы индексировать кортеж и доступ к второму элементу кортежа:

for key, value in test_dict.iteritems(): 
    print key[1] 


1 
45 
+1

Ваш код работает для меня. 'для k, v в {('CA', 1): [1,2,3,4], ('MT', 45): [5,6,7,8]}. iteritems(): print k 'prints' ('MT', 45) ('CA', 1) ' – Aya

+1

Какую версию Python вы используете? Ваш первый пример кода печатает кортежи в Python 2.7, и я могу индексировать кортеж, используя 'key [0]' и 'key [1]' – Jaco

ответ

1

Вы можете использовать list comprehension:

lst = [k for k,v in test_dict.items()] 

Выход:

[('MT', 45), ('CA', 1)] 

Чтобы получить элементы lst:

for i in lst: 
     print (i) 

Выход:

('MT', 45) 
('CA', 1) 

... и получить первый элемент кортежа:

for i in lst: 
     print (i[0]) 

Выход:

MT 
CA 

... или второй элемент кортежа:

for i in lst: 
    print (i[1]) 

Выход:

45 
1 
1

Используйте метод keys() вместо этого, таким образом:

>>> test_dict = {('CA', 1): [1,2,3,4], ('MT', 45): [5,6,7,8]} 
>>> 
>>> test_dict.keys() 
[('MT', 45), ('CA', 1)] 
>>> for k in test_dict.keys(): 
    print k 

('MT', 45) 
('CA', 1) 

Или даже просто:

>>> for k in test_dict: 
    print k 


('MT', 45) 
('CA', 1) 
Смежные вопросы