调用sort方法返回意外结果

时间:2014-12-17 18:06:28

标签: python python-3.x

我有一本字典:

{'three': 3, 'two': 2, 'one': 1}

我需要使用这个字典中的键元组进行一些操作,所以我正在尝试使用这段代码:

list(D.keys()) # now I need to sort it
list(D.keys()).sort() # why such construction returns None? (Use print() to track it)

我正在使用VS 2013,当我打印list(D.keys()).时,IntelliSense会提示我排序方法 那么我错过了什么?

p.s这样的建设很有效:

L = list(D.keys())
L.sort()

谢谢!

3 个答案:

答案 0 :(得分:1)

list.sort()是一种就地排序;您可以使用sorted返回一个新的。

sorted(D)

(它也适用于任何可迭代的,因此您不必使用list(D) [等同于list(D.keys())]。)

答案 1 :(得分:1)

.sort()方法修改了列表并返回None。要在方法返回的列表上使用它,您需要将列表保存在变量中。

L = list(D.keys())
L.sort()
print L

如果要删除临时变量,请使用sorted

print sorted(D.keys())

答案 2 :(得分:1)

如果问题是如何修复你的代码,John和minitech的答案都涵盖了它。

如果问题是“为什么list.sort返回None?”,那么Guido将他的推理解释为Python-Dev邮件列表sort() return value

总之,这是为了防止您将对象x的一系列修改写为x.sort().compress().spiflicate()

你可能不同意Guido的首选风格,但AFAIK他诚实地代表了他的理由,并在其他地方说过类似的事情。所以这就是Python的原因,没有其他动机。