Python 3.0替代Python 2.0`has_key`函数

use*_*458 2 python dictionary python-3.x

我的程序在Python 2.0中工作,但我需要它在3.0或更高版本中工作.问题是新的Python不再具有该.has_key功能.我需要知道如何解决这个问题,以便它可以在新版本中使用.

dictionary = {}

for word in words:
    if dictionary.has_key(word):
        dictionary[word]+=1
    else:
        dictionary[word]=1
bonus = {}
for key in sorted(dictionary.iterkeys()):
    print("%s: %s" % (key,dictionary[key]))
    if len(key)>5: #if word is longer than 5 characters (6 or greater) save to list, where we will get top 10 most common
        bonus[key]=dictionary[key]
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

使用in关键测试:

if word in dictionary:
Run Code Online (Sandbox Code Playgroud)

并替换.iterkeys().keys(); 在这种情况下,普通sorted(dictionary)就足够了(在Python 2 3中).

您的代码,使用更新的技术更简洁地重写,替换dictionarycollections.Counter()对象:

from collections import Counter

dictionary = Counter(words)

bonus = {}
for key in sorted(dictionary):
    print("{}: {}".format(key, dictionary[key]))
    if len(key) > 5:
        bonus[key] = dictionary[key]
Run Code Online (Sandbox Code Playgroud)

虽然您也可以使用Counter.most_common()频率(从高到低)按顺序列出键.

如果要将代码从Python 2移植到3,则可能需要阅读Python移植指南.