Запросить словарь Python для получения значения из кортежа - PullRequest
7 голосов
/ 21 сентября 2011

Допустим, у меня есть словарь Python, но значения являются кортежем:

например.

dict = {"Key1": (ValX1, ValY1, ValZ1), "Key2": (ValX2, ValY2, ValZ2),...,"Key99": (ValX99, ValY99, ValY99)}

и я хочу получить только третье значение из кортежа, например. ValZ1, ValZ2 или ValZ99 из приведенного выше примера.

Я мог бы сделать это, используя .iteritems(), например:

for key, val in dict.iteritems():
       ValZ = val[2]

однако, есть ли более прямой подход?

В идеале я бы хотел запросить словарь по ключу и вернуть только третье значение в кортеже ...

например.

dict[Key1] = ValZ1 вместо того, что я в настоящее время получаю, что является dict[Key1] = (ValX1, ValY1, ValZ1), которое не вызывается ...

Любой совет?

Ответы [ 3 ]

11 голосов
/ 21 сентября 2011

Просто продолжайте индексирование:

>>> D = {"Key1": (1,2,3), "Key2": (4,5,6)}
>>> D["Key2"][2]
6
5 голосов
/ 21 сентября 2011

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

for key, (valX, valY, valZ) in dict.iteritems():
       ...

Часто люди используют

for key, (_, _, valZ) in dict.iteritems():
       ...

, если они заинтересованы только в одном элементе кортежа.Но это может вызвать проблемы, если вы используете модуль gettext для многоязычных приложений, так как эта модель устанавливает глобальную функцию под названием _.

Поскольку кортежи неизменны, вы не можете установить только один элементкак

d[key][0] = x

Сначала нужно распаковать:

x, y, z = d[key]
d[key] = x, newy, z
1 голос
/ 22 сентября 2011

Использование выражения генератора!

for val in (x[2] for x in dict):
    print val

Вам не нужно использовать итерименты, потому что вы смотрите только на значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...