Python Glossary English

все 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Сообщить о неточности