Python:字符串排序列表和基于其他列表的无排序列表?

奇人

我有两个长度相等的列表,一个包含数字,另一个包含字符串和None我想按降序排列它们,使另一个保持同步。

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

weights, urls = zip(*sorted(zip(unordered_weights, unordered_urls), reverse=True))

数字在“ weights”数组中,字符串在“ urls”数组中。这很好。

但是,既然我None在我的字符串列表中允许了,我将得到以下错误:

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

由于某种原因,它也在尝试对字符串进行排序,以防权重相同。我怎样才能解决这个问题?

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

Zegkljan

按字典顺序对元组进行排序-首先比较第一个元素(如果相等),然后比较第二个(在您的情况下可以是)None您可以通过以下key参数将权重提取为排序键,从而仅使用权重进行排序sorted()

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

观察:

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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档