Я пытаюсь использовать объект в качестве ключа в словаре 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 использует для определения равенства, отличается между прямым утверждением «в» в списке и фактическим поиском ключа в диктовке, но я не знаю как. Любые советы или идеи?