在Python 3中使用lambda进行排序

6

这段代码可以在Python 2.7中运行,我该如何使其在Python 3中运行?

arestas = dict()
edges = arestas.items()
edges.sort(key=lambda x: x[1])

返回结果:

返回的错误是:

AttributeError: 'dict_items' 对象没有 'sort' 属性

谢谢!

1个回答

8
这里的问题在于,dict.items()在Python 3中返回一个字典视图。就好像在Python 2中调用了dict.viewitems()

要么先将字典视图转换为列表,要么使用sorted()函数
edges = list(arestas.items())
edges.sort(key=lambda x: x[1])

或者

edges = arestas.items()
edges = sorted(edges, key=lambda x: x[1])

由于后者已经包含了一个隐式转换为list,因此除非您仍然需要访问未排序的列表,否则它是更好的选择。

除非你仍然需要访问未排序的列表。能否解释一下?在你的任何一个示例中,如何访问未排序的列表? - Markus Meskanen
@MarkusMeskanen: edges = list(arestas.items()) 会给你一个列表;在使用 edges.sort() 或者 sorted(edges) 进行排序之前,你可以对它进行一些操作。 - Martijn Pieters
哦,抱歉,我刚才误解了那句话。好的,没问题 :) - Markus Meskanen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接