2012-06-26 105 views
1

看起來像應該有...在Python中使用元組作爲字典鍵的缺點?

現在它似乎像魔術,你可以多維散列到同一張表,沒有任何負面影響。

+4

生活確實很棒:) –

+0

@SimeonVisser無論何時,我有一個看似非常具有挑戰性的問題,它突然發現,這是神奇的解決方案。 – jab

回答

4

從字典的角度來看,關於它的多維度並沒有單一的東西。字典不知道你正在將密鑰解釋爲描述一個n-空間。

例如,你可以巧妙地將你的矢量打包成一個看起來不那麼神奇的字符串,更難以正確使用,但功能相當。就解釋者而言,Python字符串仍然是另一個不可變序列。

沒有負面影響。

某些任務可能效率低於替代實施。例如,如果您使用(x, y, z)座標作爲關鍵點,則在某個z處查找所有點相對於真實的多維商店將耗費大量時間。但有時候清晰易用的執行和閱讀王牌高效存儲。

+0

隨着您一直保存設置主鍵'(x,y,z)'鍵控字典,您可以設計更多的索引方案,以根據需要加快執行其他任務。 ;) –

2

唯一的缺點是性能。更大的密鑰意味着更長的時間散列。

簡而言之,python字典中唯一的關鍵要求是它們是不可變的且可哈希的。對於元組(這是不可變的),這意味着你只需要組合子對象的散列(它們本身必須是不可變和可散列的)。你也可以使用一個冷凍套件作爲關鍵。您不能使用列表或字符串或集作爲鍵。

+0

我嘗試了一個快速和骯髒的基準比較詞典插入和查找與3元組整數與普通整數鍵。元組插入需要多花費13%的時間,查找時間多16%。這不包括自己創建元組鍵的時間 - 我預先爲測試構建了一個鍵列表。所以它有所作爲,但不是一個巨大的。 –