[英]Look up a tuple in a python dictionary matching (x,y) or (y,x)
我有一個帶有(x,y)
鍵的字典,其中(x,y)
表示與(y,x)
,我該怎么做?
我可以:
>>> d = {(1,2): "foo"}
>>> i = d.get(2,1)
>>> if i is None:
... i = d.get((1,2))
...
>>> i
'foo'
有沒有更好的方法,所以d.get((2,1))
會直接匹配鍵(1,2)
? 理想情況下,我想插入例如(2,1)
並且不要與(1,2)
鍵區別開來。
使用frozensets而不是元組。
d = {frozenset((1,2)): "foo"}
print d.get(frozenset((2,1)))
您需要自己的數據類型。 為(1, 2)
和(2, 1)
(1, 2)
返回__hash__
的相同值的東西。
但是你為什么要這樣做呢? 你想要一個集合而不是一個元組嗎? 這看起來像是這樣的:
d = {}
d[frozenset((1, 2))] = 'something'
s = frozenset((2,1))
if s in d:
print '(2, 1) is in the dict'
else:
print 'not found'
請注意,它必須是frozenset
,因為dict鍵必須是不可變的。
def normalise_input_pair(x, y):
return x, y if x <= y else y, x
內存使用可能是一個考慮因素; 你有多少這些?
>>> sys.getsizeof(frozenset((1,2)))
116
>>> sys.getsizeof((1,2))
36
>>>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.