Функция hasattr() не работает так, как я ожидал в Python
Функция hasattr() не работает так, как я ожидал в Python
У меня есть следующий код:
#!/usr/bin/python
import re
import os
import sys
results=[{'data': {}, 'name': 'site1'}, {'data': {u'Brazil': '5/1', u'Panama': '2000/1'}, 'name': 'site2'}]
print results[1]
if hasattr(results[1]['data'], u'Brazil'):
print 'has'
else:
print 'hasn\'t'
Когда я запускаю его, он дает мне вывод: hasn't
,
Я не понимаю, как проверить имущество, если оно существует.
Я пытался удалить u
до Brazil
но это не работает
Как это решить?
2 ответа
hasattr(..)
проверяет, есть ли у объекта атрибут с заданным именем. Но, как говорят условия правильно, нет somedict.Brazil
,
Вы можете проверить членство ключа в словаре с помощью in
, лайк:
if u'Brazil' in results[1]['data']:
print 'has'
else:
print 'hasn\'t'
Обратите внимание, что это только проверяет, есть ли в словаре ключ, равный данному ключу (u'Brazil'
), он не проверяет значения, для значений, вы можете, например, использовать '5/1' in results[1]['data'].values()
, Обратите внимание, что поиск ключей обычно выполняется в O (1), тогда как поиск значений будет выполняться в O (n).
hasattr
работает с атрибутами, а не с ключами словаря - если вы можете получить к нему точечные обозначения (как в data.Brazil
) затем hasattr
вернусь True
иначе вернется False
- и в этом случае он вернется False
,
использование in
вместо:
if u'Brazil' in results[1]['data']: