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

问题描述 投票:1回答:2

函数'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,但它不起作用。 怎么解决?

python dictionary hasattr
2个回答
7
投票

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)中运行。


3
投票

hasattr操作属性,而不是字典键 - 如果你可以用点符号(如data.Brazil)访问它,那么hasattr将返回True,否则它将返回False-并且在这种情况下它将返回False

使用in代替:

if u'Brazil' in results[1]['data']:
© www.soinside.com 2019 - 2024. All rights reserved.