函数 'hasattr()' 没有像我在 Python 中预期的那样工作

Function 'hasattr()' doesn't work as I expected in 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.
我不明白如何检查 属性 是否存在。
我试图在 Brazil 之前删除 u 但它不起作用。
如何解决?

hasattr(..) 检查对象是否具有给定名称的 属性 。但正如条件所说,没有 somedict.Brazil.

您可以使用 in 检查字典中 的成员资格,例如:

if <b>u'Brazil' in results[1]['data']</b>:
    print 'has'
else:
    print 'hasn\'t'

请注意,这仅检查字典中是否存在等于给定键 (u'Brazil') 的 key,它不会检查值,对于值,您可以使用 '5/1' in results[1]['data'].values()。请注意,搜索 keys 通常在 O(1) 中完成,而搜索值 运行 in O(n).

hasattr 属性 上运行,而不是在 字典键 上运行 - 如果您可以使用点符号访问它(如data.Brazil) 然后 hasattr 将 return True,否则它将 return False- 在这种情况下它将 return False.

改用in

if u'Brazil' in results[1]['data']: