Функция 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']:
Другие вопросы по тегам