我有一个zip
对象,我想对它进行排序(基于一个特定的键)。
我已经看到了How do I sort a zipped list in Python?,但是接受的答案在python 3.6中不再有效。
例如
In [6]: a = [3,9,2,24,1,6]
In [7]: b = ['a','b','c','d','e']
In [8]: c = zip(a,b)
In [9]: c
Out[9]: <zip at 0x108f59ac8>
In [11]: type(c)
Out[11]: zip
In [12]: c.sort()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-12-a21727fa8976> in <module>()
----> 1 c.sort()
AttributeError: 'zip' object has no attribute 'sort'
# Wanted this to be sorted by the first element
In [13]: for l,r in c: print(l,r)
3 a
9 b
2 c
24 d
1 e
换句话说,如何使zip迭代顺序与排序顺序一致。 我知道将zip转换为元组列表将允许我修复此问题,但我希望保留压缩的对象(就像以前python2.7的好日子一样)
不能对zip对象使用
sort
,zip
对象没有这样的属性。但是,您可以将zip
对象转换为具有list(zipped_object)
的列表,然后对其应用sort
进行就地排序。但是,由于压缩对象也是一个iterable,我的建议是使用sorted()。它还允许您编写一个排序函数,根据该函数对集合进行排序。
在这里,我根据每个
(x,y)
对中y
的值对其进行排序。注意,
sorted
将返回一个新的排序列表,而sort
将对集合进行就地排序。Python 3中的
zip()
返回一个迭代器;当您请求元素时,输入将被压缩。迭代器不可排序,不您可以使用^{} function 来“抽出”元素并从中返回排序列表:
您还可以通过调用
zip()
对象上的list()
将其转换为列表,然后使用list.sort()
方法对结果进行排序,但这比使用sorted()
函数要做的工作更多。sorted()
采用与list.sort()
相同的关键字参数,因此仍然可以使用相同的key
函数:演示:
另见What is the difference between `sorted(list)` vs `list.sort()` ? python
相关问题 更多 >
编程相关推荐