我正在維護一個字典,用於跟蹤對象之間的相似性。
例如,這本詞典可以是這樣的:字典中的複合鍵
similarities = {
p1: {p2: v12, p3:v13, p4:v14},
p2: {p1: v21, p3:v23, p4:v24},
p3: {p1: v31, p2:v32, p4:v34},
p4: {p1: v41, p2:v42, p4:v43}
}
注意,該相似性度量是對稱的。因此,similarities[p1][p2]
與similarities[p2][p1]
相同,即v12 == v21
。
有時候,我需要從similarities[p1]
消除p2
;在這樣做的時候,我需要從similarities
的所有內部字典中刪除p1
和p2
。
這是單調而低效的。
因此,而不是保持對稱字典的,有保持字典,複合鍵,這樣我可以查找similarities[p1,p2]
的方法嗎?
自從(p1, p2) != (p2, p1)
以來,我無法真正使用tuple
,我無法事先知道如何排序元組。
一個frozenset
是我能想到的唯一的其他容器,但不會削減它,因爲有可能仍處於similarities
其他鍵的是包含p1
或p2
作爲一個組成部分。那麼我可以用什麼容器來解決這個問題?
技術信息:
- 蟒蛇2.7
- 總是會有在這個 「複合鍵」
謝謝
'frozenset'似乎將解決您的問題,我 - 任何理由認爲,有可能是更好的東西? – mgilson 2013-02-13 01:51:16
你可以使用'similarities [p1,p2]'這樣的語法嗎? – Blender 2013-02-13 01:52:10
@Blender:不,這是非法的語法,至多可以翻譯成一個元組 – inspectorG4dget 2013-02-13 01:52:41