导入时排序功能的工作方式不同,而不是在脚本中调用

时间:2014-07-22 04:27:34

标签: python list sorting python-2.7 module

这是一个分解列表并将其分类为元组的函数,第一个对象是项目,第二个是它出现的次数。

def top(item, default=None):
    if default is None: default = len(item)
    if type(item) is list:
        ob = {}
        for x in item:
            a = ob.get(x, 0)
            ob[x] = a+1
        return sorted(ob.items()[:default],key=lambda x: x[1])
    else: raise TypeError, "not a list"

如果我直接在脚本中调用此函数,则会将其写入,如下所示:

print top([i for i in "aaaabcdeee"]) 
#['a', 'a', 'a', 'a', 'b', 'c', 'd', 'e', 'e', 'e']

它会正确打印出来。像这样:

[('c', 1), ('b', 1), ('d', 1), ('e', 3), ('a', 4)]

但是,如果我创建一个新脚本并导入该函数的函数,则会以不同方式打印出来:

[('a', 4), ('c', 1), ('b', 1), ('e', 3), ('d', 1)]

正如您在上面的示例中所看到的,对象未正确排序。我该怎么办?

1 个答案:

答案 0 :(得分:2)

return sorted(ob.items()[:default],key=lambda x: x[1])

糟糕。

return sorted(ob.items(), key=lambda x: x[1])[:default]