все Python 3Кортежи (tuple)понятие
Кортеж как ключ словаря
применение
Кортежи хэшируемы (если все элементы хэшируемы), поэтому могут быть ключами словаря. Списки — нет.
Синтаксис
d[tuple_key] = val
Неизменяемости самой по себе мало: (1, [2]) — кортеж, но список внутри делает его нехэшируемым, и словарь ответит TypeError: unhashable type: 'list'. В индексе скобки можно опустить — d[1, 2] и d[(1, 2)] это один и тот же ключ, а вот порядок значим: (1, 2) и (2, 1) — два разных ключа.
Примеры
coords = {(0, 0): 'origin', (1, 0): 'right', (0, 1): 'up'}
print(coords[(0, 0)])
# → 'origin'
grid = {}
for i in range(3):
for j in range(3):
grid[(i, j)] = i * 3 + j
print(grid[(2, 1)])
# → 7
try:
d = {[1, 2]: 'list'}
except TypeError as e:
print(e)
# → ? текст TypeError зависит от версии: 3.14 добавил «cannot use 'list' as a dict key»
pair_count = {}
pairs = [(1, 2), (3, 4), (1, 2)]
for p in pairs:
pair_count[p] = pair_count.get(p, 0) + 1
print(pair_count)
# → {(1, 2): 2, (3, 4): 1}
print(hash((1, 2, 3)))
# → ? хеш кортежа: солится PYTHONHASHSEED и меняется от запуска
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности