【问题标题】:python: 'dict' object has no attribute 'has_key'python:'dict'对象没有属性'has_key'
【发布时间】:2017-10-11 00:34:45
【问题描述】:

我有这段代码:

def separate_sets(self):
    self.groups = {}
    self.group_names = list(set(self.y))
    if len(self.group_names) > 2:
        print ('more than two classes provided...exiting')
        sys.exit()
    #putting all the samples in a regular order so that their
    #grouping can be easier.
    combined  = sorted(zip(self.x, self.y), key = lambda n: n[1])
    #--doing val,key here because (x,y) was zipped
    for val,key in combined:
        if self.groups.has_key(key):
            self.groups[key].append(val)
        else:
            self.groups[key] = []
            self.groups[key].append(val)
    #train on each group
    self.train()

我收到以下错误消息:

如果 self.groups.has_key(key):

AttributeError: 'dict' 对象没有属性 'has_key'

【问题讨论】:

标签: python


【解决方案1】:

在 Python 3.x 中,has_key() 已被删除,请参阅 documentation。因此,你必须使用in,这是pythonic的方式:

if key in self.groups:

【讨论】:

    【解决方案2】:

    在python中你可以使用“in”来检查

     if key in self.groups:
    

    【讨论】:

      【解决方案3】:

      您可以使用setdefault 方法消除整个if 语句

          self.groups.setdefault(key, []).append(val)
      

      【讨论】:

      • 哦,你的意思是整个 'if' 到 'else' ?
      • 是的。 setdefault 返回对 self.groups[key] 的引用,如果 key 不在 dict 中,则返回 []。无论哪种方式,您都可以将val 添加到结果列表中。
      【解决方案4】:

      python 3.x has_key was removed 开始,现在您必须使用 in 运算符

      【讨论】:

      • 您没有看到其他 2 个内容相同的答案吗?
      • @cᴏʟᴅsᴘᴇᴇᴅ 与 Óscar López 的回答同时发布;)
      猜你喜欢
      • 2020-05-26
      • 1970-01-01
      • 2020-09-11
      • 2018-06-22
      • 2018-10-13
      • 2019-08-02
      • 2022-12-22
      • 1970-01-01
      • 2016-08-25
      相关资源
      最近更新 更多