簡體   English   中英

在python詞典中查找匹配(x,y)或(y,x)的元組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM