объекты как ключи в словарях Python

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

16
задан Richard J 19 September 2013 в 00:11
поделиться