我有两个列表
L1 = ['tom', 'jerry', 'spike', 'fido', 'donald', 'mickey']
L2 = [3,5,7,6,9,3]
dictionary = dict(zip(L1, L2))
print dictionary
sorted_friends = sorted(dictionary.iteritems(), key = operator.itemgetter(1), reverse= True)
print sorted_friends
基本上,我是根据 L1 和 L2 创建字典。 {'mickey': 3, 'tom': 3, 'jerry': 5, 'donald': 9, 'fido': 6, 'spike': 7} 按值排序(反向)排序,这给了我:[('donald', 9), ('spike', 7), ('fido', 6), ('jerry', 5), ( '米奇', 3), ('汤姆', 3)]
我想要一个前 3 个键的列表:比如 [donald,spike,fido] 但问题是,如果我使用任何我知道的方法,比如转换为 dict() 等,它会破坏排序。
请您参考如下方法:
无需使用字典;只需创建元组列表并按适当的字段对它们进行排序。
sorted(zip(L1, L2), key=lambda x: x[1], reverse=True)[:3]
您当然可以使用 operator.itemgetter(1) 代替 lambda,随您喜欢。
如果你只是想要事后的名字,你可以修改这个:
[a for a,_ in sorted(zip(L1, L2), key=lambda x: x[1], reverse=True)][:3]
请注意,您还可以通过简单地颠倒顺序来方便地完全避免指定自定义排序函数:
[b for _,b in sorted(zip(L2, L1), reverse=True)][:3]
这是有效的,因为元组的默认排序顺序是根据它们的第一个元素对它们进行排序,然后是第二个元素,依此类推 - 所以它将首先按值排序。
