Я пытаюсь использовать объект в качестве ключа в словаре Python, но он ведет себя так, что я не могу понять .
Сначала я создаю словарь с моим объектом в качестве ключа:
package_disseminators = {
ContentType("application", "zip", "http://other/property") : "one",
ContentType("application", "zip") : "two"
}
Теперь создаю еще один объект, который "такой же" как ключ.
content_type = ContentType("application", "zip", "http://other/property")
Я предоставил объекту ContentType собственный __ eq __
и пользовательский __ str __
методы, так что метод __ eq __
сравнивает значения __ str __
.
А теперь интерактивный питон:
>>> for key in package_disseminators:
... if key == content_type:
... print "match"
... else:
... print "no match"
...
no match
match
>>> content_type in package_disseminators.keys()
True
Хорошо, похоже, что мой объект определенно правильно идентифицирован как ключ, так что:
>>> package_disseminators[content_type]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: (& (type="application/zip") (packaging="http://other/property") )
Э ... хорошо? Итак, content_type находится в списке package_disseminators.keys (), но не является ключевым?
>>> package_disseminators.has_key(content_type)
False
По-видимому, нет.
Я предполагаю, что процесс сравнения, который Python использует для определения равенства, отличается от прямого оператора "in" на list и на самом деле ищу ключ в dict, но я не знаю как. Есть какие-нибудь советы или идеи?