【问题标题】:Function 'hasattr()' doesn't work as I expected in Python函数 'hasattr()' 在 Python 中无法正常工作
【发布时间】:2018-07-23 01:13:05
【问题描述】:

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

【问题讨论】:

  • 这不是一个属性,您可以使用'Brazil' in results[1]['data']检查字典/集合中某个键的成员资格。
  • 也许标题应该是“hasattr 是做什么用的?”因为它完全符合预期,尽管您的期望可能有所不同。
  • @SethMMorton:已编辑

标签: python dictionary hasattr


【解决方案1】:

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

改用in

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-05
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      相关资源
      最近更新 更多