Che*_*ese 8 python sorting dictionary
说我有
votes = {'Charlie': 20, 'Able': 10, 'Baker': 20, 'Dog': 15}
Run Code Online (Sandbox Code Playgroud)
我明白
print(sorted(votes.items(), key = lambda x: x[1]))
Run Code Online (Sandbox Code Playgroud)
会导致
[('Able',10),('Dog',15),('Baker',20),('Charlie',20)]`
但这是如何工作的?
小智 7
>>> votes = {'Charlie': 20, 'Able': 10, 'Baker': 20, 'Dog': 15}
Run Code Online (Sandbox Code Playgroud)
如果我们应用上面的.items()字典,votes我们会得到:
>>> votes_items=votes.items()
>>> votes_items
[('Charlie', 20), ('Baker', 20), ('Able', 10), ('Dog', 15)]
#a list of tuples, each tuple having two items indexed 0 and 1
Run Code Online (Sandbox Code Playgroud)
对于每个元组,第一个索引[0]是字符串 ( 'Charlie','Able','Baker','Dog'),第二个索引是[1]整数 ( 20,10,20,15)。
print(sorted(votes.items(), key = lambda x: x[1]))(tuples)指示 python使用每个元组的votes第二个索引([1]整数)作为排序的基础对项目进行排序。
Python 比较每个元组中的每个整数,并返回一个列表,该列表reverse=True使用每个元组的整数作为 来key确定元组的排名,以升序排列每个元组(这可以与参数反转),
如果键中存在平局,则项目按照它们最初在字典中的顺序排列。(('Charlie', 20)之前也是如此,因为键上('Baker', 20)有一个领带,但是('在原始字典中出现在之前)。20==20Charlie', 20)('Baker', 20)votes
那么输出是:
[('Able', 10), ('Dog', 15), ('Charlie', 20), ('Baker', 20)]
Run Code Online (Sandbox Code Playgroud)
我希望这能让它更容易理解。
传递key给您的函数将获得要排序的每个项目,并返回Python可以排序的“键”。因此,如果要按字符串的相反顺序对字符串列表进行排序,可以执行以下操作:
list_of_strings.sort(key=lambda s: s[::-1])
Run Code Online (Sandbox Code Playgroud)
这使您可以指定每个项目的排序依据值,而不必更改项目。这样,您不必构建反向字符串列表,对其进行排序,然后将其反向反向。
# DON'T do this
data = ['abc', 'def', 'ghi', 'jkl']
reversed_data = [s[::-1] for s in data]
reversed_data.sort()
data = [s[::-1] for s in reversed_data]
# Do this
data.sort(key=lambda s: s[::-1])
Run Code Online (Sandbox Code Playgroud)
在您的情况下,代码按元组中的第二个项目对每个项目进行排序,而通常它最初将按元组中的第一个项目进行排序,然后中断与第二个项目的联系。
key 是一个函数,将被调用以在比较集合的项目之前对其进行转换。传递给 key 的参数必须是可调用的。
使用 lambda 创建一个匿名函数(可调用)。在 sorted 的情况下,callable 只接受一个参数。Python 的 lambda 非常简单。它真的只能做和返回一件事。
| 归档时间: |
|
| 查看次数: |
4309 次 |
| 最近记录: |