Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据不均匀值对列表进行排序_Python_Python 2.7 - Fatal编程技术网

Python 根据不均匀值对列表进行排序

Python 根据不均匀值对列表进行排序,python,python-2.7,Python,Python 2.7,我正在为一个库创建一个脚本,它按照作者的平均评分的降序对作者进行排序 下面是我的列表:(它有作者姓名++平均评级) 下面是我尝试的:(我用空格分割值,并附加在一个新列表中,然后用第三个值排序,即评级) for line in rate_order: sort_list.append(line.split(' ')) print sorted(sort_list, key=itemgetter(2)) 问题是一些作者的名字中有三个空格,所以第三个值不是评级。有更好(或更干净)的方法吗?使

我正在为一个库创建一个脚本,它按照作者的平均评分的降序对作者进行排序

下面是我的列表:(它有作者姓名++平均评级)

下面是我尝试的:(我用空格分割值,并附加在一个新列表中,然后用第三个值排序,即评级)

for line in rate_order:
    sort_list.append(line.split(' '))
print sorted(sort_list, key=itemgetter(2))

问题是一些作者的名字中有三个空格,所以第三个值不是评级。有更好(或更干净)的方法吗?

使用
rsplit

>>> help(''.rsplit)
Help on built-in function rsplit:

rsplit(...)
    S.rsplit([sep [,maxsplit]]) -> list of strings

    Return a list of the words in the string S, using sep as the
    delimiter string, starting at the end of the string and working
    to the front.  If maxsplit is given, at most maxsplit splits are
    done. If sep is not specified or is None, any whitespace string
    is a separator.

>>> 'George R.R. Martin 5.0'.rsplit(' ', 1)
['George R.R. Martin', '5.0']
获取拆分的最后一项的另一种方法是使用-1索引:

>>> 'George R.R. Martin 5.0'.split()[-1]
'5.0'
如果您的列表被称为
author\u ratings
,您可以通过执行

author_ratings.sort(key=(lambda(s): float(s.rsplit(' ', 1)[1])), reverse=True)

使用
rsplit

>>> help(''.rsplit)
Help on built-in function rsplit:

rsplit(...)
    S.rsplit([sep [,maxsplit]]) -> list of strings

    Return a list of the words in the string S, using sep as the
    delimiter string, starting at the end of the string and working
    to the front.  If maxsplit is given, at most maxsplit splits are
    done. If sep is not specified or is None, any whitespace string
    is a separator.

>>> 'George R.R. Martin 5.0'.rsplit(' ', 1)
['George R.R. Martin', '5.0']
获取拆分的最后一项的另一种方法是使用-1索引:

>>> 'George R.R. Martin 5.0'.split()[-1]
'5.0'
如果您的列表被称为
author\u ratings
,您可以通过执行

author_ratings.sort(key=(lambda(s): float(s.rsplit(' ', 1)[1])), reverse=True)

您可以在空格处拆分,然后取最后一个组件的浮点值。以下是一行:

>>> print sorted(rate_order, key=lambda r:float(r.split(' ')[-1]))
['Katherine Applegate 3.0', 'Stephen King 3.66', 'Eoin Colfer 4.25', 'J.K. Rowling 4.36', 'Devdutt Pattanaik 4.42', 'Jeffrey Archer 4.62', 'Sidney Sheldon 4.63', 'Clive Cussler 4.66', 'Michael Crichton 4.71', 'Narendra Kohli 4.9', 'George R.R. Martin 5.0', 'Dan Brown 5.0', 'Arthur Conan Doyle 5.0', 'Douglas Preston 5.0']

请注意,
[-1]
索引提取最后一个元素(从末尾开始的第一个元素)。

您可以在空格处拆分,然后获取最后一个组件的浮点值。以下是作为一行的完整内容:

>>> print sorted(rate_order, key=lambda r:float(r.split(' ')[-1]))
['Katherine Applegate 3.0', 'Stephen King 3.66', 'Eoin Colfer 4.25', 'J.K. Rowling 4.36', 'Devdutt Pattanaik 4.42', 'Jeffrey Archer 4.62', 'Sidney Sheldon 4.63', 'Clive Cussler 4.66', 'Michael Crichton 4.71', 'Narendra Kohli 4.9', 'George R.R. Martin 5.0', 'Dan Brown 5.0', 'Arthur Conan Doyle 5.0', 'Douglas Preston 5.0']
请注意,
[-1]
索引提取最后一个元素(从末尾开始的第一个元素)。

您可以在
排序的
函数中使用regex()匹配。使用这种搜索方法,您可以找到与它在字符串中的位置无关的评级。

在这段代码中,我们使用按模式搜索
\d.\d+

其中:

\d
-匹配任何数字字符(相当于
[0-9]

\。
-匹配dot本身

\d+
-匹配一个或多个数字字符

同样,我们也得到了正则表达式搜索的结果

lambda
函数来自,我们在排序时将
el
参数传递给它,该参数对应于列表中的每个元素。

您可以在
排序的
函数中使用正则表达式()匹配。使用这种搜索方法,您可以找到与它在字符串中的位置无关的评级。

在这段代码中,我们使用按模式搜索
\d.\d+

其中:

\d
-匹配任何数字字符(相当于
[0-9]

\。
-匹配dot本身

\d+
-匹配一个或多个数字字符

同样,我们也得到了正则表达式搜索的结果


lambda
函数来自,我们将
el
参数传递给它,它对应于排序时列表中的每个元素。

我没有单词。太棒了。我不知道有一个rsplit。我没有单词。太棒了。我不知道有rsplit。