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