2012-06-26 2 views
1

Похоже, что должно быть ...Любой недостаток использования кортежей в качестве словарных ключей в Python?

Прямо сейчас кажется, что это просто волшебство, которое вы можете многократно использовать в одной таблице без каких-либо негативных эффектов.

+4

Жизнь действительно может быть такой большой :) –

+0

@SimeonVisser В любое время, когда у меня есть очень сложная проблема, неожиданно получается, что это магическое решение. – jab

ответ

4

С точки зрения словаря, в нем нет ни одной вещи многомерной. Словарь не знает, что вы интерпретируете ключи как описывающие n-пространство.

Вы могли бы, например, искусно упаковать свой вектор в строку, которая казалась бы менее волшебной, сложнее получить право, и при этом быть функционально эквивалентной. Строки Python - еще одна неизменяемая последовательность в отношении интерпретатора.

Не существует отрицательного воздействия.

Некоторые задачи могут быть менее эффективными, чем альтернативная реализация. Например, если вы используете (x, y, z) координаты как ключи, найти все очки на каком-то z будет много заниматься относительно реального многомерного магазина. Но иногда ясность и легкость реализации и чтение эффективного козыря.

+0

Если вы сохранили настройку основного ключа (x, y, z) 'keyed dict, вы можете разработать дополнительные схемы индексирования, чтобы ускорить выполнение других задач по мере необходимости. ;) –

2

Единственный недостаток - производительность. Большие клавиши означают более длительное время для хэша.

Проще говоря, единственное требование ключей в питоне dict заключается в том, что они являются неизменяемыми и хешируемыми. Для кортежей (которые являются неизменяемыми) это означает, что вам просто нужно объединить хэши подэлементов (которые сами по себе должны быть неизменными и хешируемыми). Вы также можете использовать фризонсет в качестве ключа. Вы не можете использовать списки или dicts или sets в качестве ключей.

+0

Я пробовал быстрый и грязный бенчмарк, сравнивающий вставку dict и поиск с помощью кортежей-3-целых и простых целых ключей. кортежи заняли около 13% больше времени в вставке и на 16% больше времени в поиске. Это не считается временем для создания самих ключей кортежа - я подготовил список ключей для тестов. Так что это имеет значение, но не громадное. –

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