我有两个元组a
和b
,还有一个字典d
a=('C', 'G')
b=('G', 'C')
d={('G', 'C'): 'T'}
我希望d[a]
和d[b]
返回'T'
为此,我使用了set()
,因为我认为set()
是在固定iterable对象元素的顺序(并删除重复项,但我不关心这一点)
所以我做了:
tuple(set(a)) in d # return True
tuple(set(b)) in d # return True
# I did tuple(set()) because set() alone is not hashable and so cannot be used directly
这是有效的,直到它不起作用。因此,我比有时更容易发现
set(('C', 'G'))
{'C', 'G'}
但有时情况并非如此
set(('C', 'G'))
{'G', 'C'}
我知道set()
按照它想要的顺序对元素进行排序,但我希望对于给定的元素集,顺序总是相同的
因此,我的问题是:
只要在需要索引dict时使用排序的元组即可:
该集合建立在一些数据结构之上,提供了有效的成员检查。结果是Python在实例化此结构时丢失了代码中指定的原始顺序
如果您真的只有两个标签,我可能会显式地指定这两个值
要解决此问题的更大版本,需要分别设置这两个订单的值。对于更大的问题,我将使用带有双循环的理解
一种解决方案是通过对键进行排序来规范化键。当我们查找时,我们也会在查找之前对键进行排序
讨论
在集合是可变的(可变的)之前,我们不能使用集合作为键,因此不需要常量散列作为键。我的方法是创建一个专门的字典,其中键是经过排序的元组,这使得查找更容易
__init__
方法接受可以传递到dict()
的所有内容。__repr__
方法有助于调试。所有其他方法都可以满足collections.abc.MutableMapping
要求相关问题 更多 >
编程相关推荐