2017-10-11 122 views
0

我有这样一段代码:蟒蛇: '字典' 对象有没有属性 '对象的has_key'

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() 

我收到以下错误信息:

if self.groups.has_key(key):

AttributeError: 'dict' object has no attribute 'has_key'

+1

怎么样的错误不清楚? ['has_key'已被弃用](https://docs.python.org/2/library/stdtypes.html#dict.has_key)。你有没有使用Python 3? –

回答

3

在Python中你可以使用“在”检查

if key in self.groups: 
4

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

if key in self.groups: 
0

截至python 3.x has_key was removed,现在你必须使用在运营商

+0

您没有看到其他2个相同内容的答案? –

+0

@cᴏʟᴅsᴘᴇᴇᴅ发布的时间与ÓscarLópez的答案相同;) –

1

您可以通过使用setdefault方法

全消 if声明
self.groups.setdefault(key, []).append(val) 
+0

哦,你的意思是整个'if'到'else'? –

+0

是的。如果'key'不在'dict'中,'setdefault'返回对'self.groups [key]'的引用,或'']'。无论哪种方式,您都可以在结果列表中添加“val”。 – chepner

相关问题