Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 跳过(key=lambda)排序中的前两个字符_Python_Sorting_Python 3.x_Dictionary_Lambda - Fatal编程技术网

Python 跳过(key=lambda)排序中的前两个字符

Python 跳过(key=lambda)排序中的前两个字符,python,sorting,python-3.x,dictionary,lambda,Python,Sorting,Python 3.x,Dictionary,Lambda,这是我上一个问题的延伸,该问题已得到适当回答,如下所示: 我在字典中设置了用户和分数,这样键是“group.name”,值是他们的分数(例如“'3.Julie':'7'是组3中的用户“Julie”,分数为7)。我已经知道如何按值排序,然后按键排序: sorted(dictionary.items(), key=lambda t: t[::-1]) 但是,当它比较两个键时,我希望它忽略第一个字符/两个字符,这样分数相同的用户将按字母顺序排序(而目前,他们将按组排序,因为组号排在第一位)。在不改

这是我上一个问题的延伸,该问题已得到适当回答,如下所示:

我在字典中设置了用户和分数,这样键是“group.name”,值是他们的分数(例如“'3.Julie':'7'是组3中的用户“Julie”,分数为7)。我已经知道如何按值排序,然后按键排序:

sorted(dictionary.items(), key=lambda t: t[::-1])

但是,当它比较两个键时,我希望它忽略第一个字符/两个字符,这样分数相同的用户将按字母顺序排序(而目前,他们将按组排序,因为组号排在第一位)。在不改变命名约定的情况下,我还能做到这一点吗?(理想情况下,在lambda键中,几行就可以了,但如果超过2-3行就不值得了)

当您迭代dict.items()时,您会得到元组
(键,值)
,例如

>>> for t in {'3.Julie': '7'}.items():
       print t
('3.Julie', '7')
目前,你正在扭转整个局面:

>>> ('3.Julie', '7')[::-1]
('7', '3.Julie')
但您可以更明确地说明您想要的内容(即第二部分,然后是第一部分),并包括切片以删除相关字符:

>>> t = ('3.Julie', '7')
>>> t[1], t[0][2:]
('7', 'Julie')
因此,您的排序变成:

sorted(dictionary.items(), key=lambda t: (t[1], t[0][2:]))
请注意,lambda中的括号是指示元组所必需的,否则
t[0][2://code>将被解释为排序的
的位置参数


如果希望值和键按相反方向排序,可以执行以下操作:

key=lambda t: (-int(t[1]), t[0][2:])
例如:

>>> d = {'1.John': '3', '2.Karl': '7', '3.Julie': '7'}
>>> sorted(d.items(), key=lambda t: (-int(t[1]), t[0][2:]))
[('3.Julie', '7'), ('2.Karl', '7'), ('1.John', '3')]

当您迭代dict.items()
时,会得到元组
(键、值)
,例如

>>> for t in {'3.Julie': '7'}.items():
       print t
('3.Julie', '7')
目前,你正在扭转整个局面:

>>> ('3.Julie', '7')[::-1]
('7', '3.Julie')
但您可以更明确地说明您想要的内容(即第二部分,然后是第一部分),并包括切片以删除相关字符:

>>> t = ('3.Julie', '7')
>>> t[1], t[0][2:]
('7', 'Julie')
因此,您的排序变成:

sorted(dictionary.items(), key=lambda t: (t[1], t[0][2:]))
请注意,lambda中的括号是指示元组所必需的,否则
t[0][2://code>将被解释为排序的
的位置参数


如果希望值和键按相反方向排序,可以执行以下操作:

key=lambda t: (-int(t[1]), t[0][2:])
例如:

>>> d = {'1.John': '3', '2.Karl': '7', '3.Julie': '7'}
>>> sorted(d.items(), key=lambda t: (-int(t[1]), t[0][2:]))
[('3.Julie', '7'), ('2.Karl', '7'), ('1.John', '3')]

当您迭代dict.items()
时,会得到元组
(键、值)
,例如

>>> for t in {'3.Julie': '7'}.items():
       print t
('3.Julie', '7')
目前,你正在扭转整个局面:

>>> ('3.Julie', '7')[::-1]
('7', '3.Julie')
但您可以更明确地说明您想要的内容(即第二部分,然后是第一部分),并包括切片以删除相关字符:

>>> t = ('3.Julie', '7')
>>> t[1], t[0][2:]
('7', 'Julie')
因此,您的排序变成:

sorted(dictionary.items(), key=lambda t: (t[1], t[0][2:]))
请注意,lambda中的括号是指示元组所必需的,否则
t[0][2://code>将被解释为排序的
的位置参数


如果希望值和键按相反方向排序,可以执行以下操作:

key=lambda t: (-int(t[1]), t[0][2:])
例如:

>>> d = {'1.John': '3', '2.Karl': '7', '3.Julie': '7'}
>>> sorted(d.items(), key=lambda t: (-int(t[1]), t[0][2:]))
[('3.Julie', '7'), ('2.Karl', '7'), ('1.John', '3')]

当您迭代dict.items()
时,会得到元组
(键、值)
,例如

>>> for t in {'3.Julie': '7'}.items():
       print t
('3.Julie', '7')
目前,你正在扭转整个局面:

>>> ('3.Julie', '7')[::-1]
('7', '3.Julie')
但您可以更明确地说明您想要的内容(即第二部分,然后是第一部分),并包括切片以删除相关字符:

>>> t = ('3.Julie', '7')
>>> t[1], t[0][2:]
('7', 'Julie')
因此,您的排序变成:

sorted(dictionary.items(), key=lambda t: (t[1], t[0][2:]))
请注意,lambda中的括号是指示元组所必需的,否则
t[0][2://code>将被解释为排序的
的位置参数


如果希望值和键按相反方向排序,可以执行以下操作:

key=lambda t: (-int(t[1]), t[0][2:])
例如:

>>> d = {'1.John': '3', '2.Karl': '7', '3.Julie': '7'}
>>> sorted(d.items(), key=lambda t: (-int(t[1]), t[0][2:]))
[('3.Julie', '7'), ('2.Karl', '7'), ('1.John', '3')]

key=lambda t:(t[1],t[0][2:)
?@jornsharpe我在关键字arg之后得到一个“非关键字arg”"当我尝试时出现语法错误。我看不出你有什么理由会这样,除非你不小心留下了一些以前的
@jornsharpe刮擦,我漏掉了括号。它似乎工作正常,但是我使用的是reverse=True,所以字母排序是反向的。有什么办法解决这个问题吗?…不要使用
reverse=True
key=lambda t:(t[1],t[0][2:)
?@jornsharpe我在关键字arg之后得到一个“非关键字arg”当我尝试时出现语法错误。我看不出你有什么理由会这样,除非你不小心留下了一些以前的
@jornsharpe刮擦,我漏掉了括号。它似乎工作正常,但是我使用的是reverse=True,所以字母排序是反向的。有什么办法解决这个问题吗?…不要使用
reverse=True
key=lambda t:(t[1],t[0][2:)
?@jornsharpe我在关键字arg之后得到一个“非关键字arg”当我尝试时出现语法错误。我看不出你有什么理由会这样,除非你不小心留下了一些以前的
@jornsharpe刮擦,我漏掉了括号。它似乎工作正常,但是我使用的是reverse=True,所以字母排序是反向的。有什么办法解决这个问题吗?…不要使用
reverse=True
key=lambda t:(t[1],t[0][2:)
?@jornsharpe我在关键字arg之后得到一个“非关键字arg”当我尝试时出现语法错误。我看不出你有什么理由会这样,除非你不小心留下了一些以前的
@jornsharpe刮擦,我漏掉了括号。它似乎工作正常,但是我使用的是reverse=True,所以字母排序是反向的。有什么办法解决这个问题吗?…不要使用
reverse=True