功能' 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
,但它不起作用
怎么解决?
答案 0 :(得分: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)中运行。
答案 1 :(得分:3)
var obj = [Int]()
obj is [String] // true
type(of: obj) == [String].self // false
type(of: obj) == [Int].self // true
obj.append(3)
obj is [String] // false
type(of: obj) == [String].self // false
对属性进行操作,而不是对词典键进行操作 - 如果您可以使用点表示法(如hasattr
中)访问它,那么{ {1}}将返回data.Brazil
,否则会返回hasattr
- 在这种情况下,它将返回True
。
改为使用False
:
False