У меня есть два кортежа a
и b
, а также словарь d
a=('C', 'G')
b=('G', 'C')
d={('G', 'C'): 'T'}
Я хочу, чтобы d[a]
и d[b]
вернули 'T'
.
Для этого я использовал set()
, потому что думал, что set()
исправляет порядок элементов итерируемого объекта (и удаляет дубликаты, но меня это не волнует).
Так я и сделал :
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()
упорядочивает элемент так, как он хочет, но я ожидал, что порядок будет всегда то же самое с заданным набором элементов.
Итак, мои вопросы:
- Почему это не так?
- Как я могу решить мою начальную проблему?