Python:根据其他列表排序字符串列表和无?

The*_*ler 2 python sorting python-3.x

我有两个相等长度的列表,一个包含数字,另一个包含数字None.我想按降序排序,保持另一个同步.

在第二个列表只能包含字符串(所以没有None元素)之前,我使用了这段代码:

weights, urls = zip(*sorted(zip(unordered_weights, unordered_urls), reverse=True))
Run Code Online (Sandbox Code Playgroud)

数字在"weights"数组中,"urls"数组中的字符串.这很好.

但是,现在我允许None在我的字符串列表中,我收到以下错误:

TypeError: unorderable types: str() < NoneType()
Run Code Online (Sandbox Code Playgroud)

出于某种原因,它也试图对字符串进行排序,我想以防重量是相同的.我怎样才能解决这个问题?

我正在使用Python 3,我在Python 2中读到None任何字符串之前,但现在它给出了一个错误.具有相同重量的弦的顺序无关紧要.

zeg*_*jan 5

按字典顺序排序元组 - 首先比较第一个元素,如果它们等于第二个元素,则在你的情况下可以None.您可以通过以下key参数将其作为排序键提取,仅使用权重进行排序sorted():

weights, urls = zip(*sorted(zip(unordered_weights, unordered_urls), reverse=True, key=lambda x: x[0]))
Run Code Online (Sandbox Code Playgroud)

注意:

In [1]: unordered_urls = ['b', 'a', None, 'c', None]
In [2]: unordered_weights = [1, 0, 0, 5, 2]  # the 'a' and None have the same weight
In [3]: weights, urls = zip(*sorted(zip(unordered_weights, unordered_urls), reverse=True))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-61fb3631580a> in <module>()
----> 1 weights, urls = zip(*sorted(zip(unordered_weights, unordered_urls), reverse=True))

TypeError: unorderable types: str() < NoneType()

In [4]: weights, urls = zip(*sorted(zip(unordered_weights, unordered_urls), reverse=True, key=lambda x: x[0]))
In [5]: weights
Out[5]: (5, 2, 1, 0, 0)
In [6]: urls
Out[6]: ('c', None, 'b', 'a', None)
Run Code Online (Sandbox Code Playgroud)