功能' hasattr()'不像我在Python中所期望的那样工作

时间:2018-02-12 19:05:57

标签: python dictionary hasattr

功能' 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 个答案:

答案 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