我正在维护一个字典,用于跟踪对象之间的相似性。
例如,这本词典可以是这样的:字典中的复合键
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