Проверка значений кортежей в словаре

У меня есть словарь, кортеж которого является его ключом, а также кортеж как его значения. Мне нужен способ доступа к значениям словаря на основе его ключей. Например:

d = {}
d = { (1, 2) : ('A', 'B'),(3, 4) : ('C', 'B') }

Теперь сначала мне нужно проверить, если ключи (1, 2) уже существует в словаре.

Что-то вроде:

if d.has_key(1,2)
   print d[1]
   print d[2]

3 ответа

Решение

Вы можете просто использовать буквальный кортеж в качестве ключа:

>>> d = {(1, 2): ('A', 'B'), (3, 4): ('C', 'D')}
>>> (1, 2) in d
True
>>> d[(1, 2)]
('A', 'B')
>>> d[(1, 2)][0]
'A'

Проблема в том, что f(a, b) трактуется как "вызов f с двумя аргументами", потому что паренсы и запятые используются как часть синтаксиса вызова функции, не оставляя ничего похожего на кортеж. использование f((a, b)) если вы должны передать буквальный кортеж в функцию.

Но с тех пор dict.has_key устарела, просто используйте inи это неудобство исчезает: (1, 2) in d

Просто используйте словарь, как в любое другое время...

potential_key = (1,2)
potential_val = d.get(potential_key)
if potential_val is not None:
    # potential_val[0] = 'A'
    # potential_val[1] = 'B'
Другие вопросы по тегам