2013-05-23 8 views
1

У меня есть название местоположения, а затем широта и долгота для каждого местоположения. Я пытаюсь определить лучший способ выразить один ключ с двумя значениями в Python. Я думал, это:Словарь с кортежами как значения?

dict = { 
    'California': ('36.46715833333333', '-117.85891388888888'), 
    'California2': ('36.46715833333333', '-117.85891388888888'), 
} 

Затем добавить еще:

dict['California'] = ('36.46715833333333', '-117.85891388888888') 

Но как бы я легко перебирать каждый и извлечь их?

for location in dict: 
    for lat, lon in location: 
     print lat, lon 

Это дает ValueError, указав, что для распаковки не более одного значения. Как я повторяю это и получаю каждый лат и долго?

+0

Пожалуйста, смотрите документацию на 'dict'; ищите 'dict.iteritems()' или 'dict.items()' или 'dict.values ​​()' или 'dict.itervalues ​​()' –

ответ

6

Итерации над объектом dict повторяются над его ключами. Вы должны либо получить значение в явном виде:

for location in d: 
    lat, long = d[location] 

Или используйте .items():

for name, location in d.items(): 
    lat, long = location 

Или используйте кортеж распаковке с этим:

for name, (lat, long) in d.items(): 
    ... 

Кроме того, не называйте ваш словарь dict , Вы затеняете встроенный dictlong, но вы, вероятно, не заметите).

+1

+1 за много хороших советов. Я бы придерживался 'lon' вместо' long', хотя (как вы говорите, это затенение встроенного). –

1

Как было сказано в другом ответе, итерация dict требует только ключей, а не значений. Самый прямой способ перебора, как вы хотите:

for lat, lon in d.itervalues(): 

Чтобы получить все три:

for location, (lat, lon) in d.iteritems(): 
+0

Предположительно, OP хочет получить доступ к клавишам, или он просто использовал бы список вместо словаря ... –

+0

@HenryKeiter, в примере и вопросе упоминались только координаты - я предположил, что ключи использовались в другой части приложения. –

+0

Да, мне нужны все три значения. – Dan

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