Python 3.0替代Python 2.0`has_key`函数

时间:2014-03-20 18:34:25

标签: python python-3.x dictionary

我的程序适用于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]

1 个答案:

答案 0 :(得分:5)

使用in进行密钥测试:

if word in dictionary:

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

您的代码,使用更新的技术进行了更紧凑的重写,将dictionary替换为collections.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]

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

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