Python 使用字典键值对列表进行排序
让我们假设我有一个列表Python 使用字典键值对列表进行排序,python,python-3.x,list,sorting,Python,Python 3.x,List,Sorting,让我们假设我有一个列表 list_values = ['key3', 'key0', 'key1', 'key4', 'key2'] 还有一份命令 ordered_dict = OrderedDict([('key4', 0), ('key1', 1), ('key2', 2), ('key0', 3), ('key3', 4)]) 如何使用ordered\u dict键对list\u值进行相应排序 i、 e:-sorted_list=['key4','key1','key2','key0'
list_values = ['key3', 'key0', 'key1', 'key4', 'key2']
还有一份命令
ordered_dict = OrderedDict([('key4', 0), ('key1', 1), ('key2', 2), ('key0', 3), ('key3', 4)])
如何使用ordered\u dict
键对list\u值进行相应排序
i、 e:-sorted_list=['key4','key1','key2','key0','key3']
编辑:既然几乎所有答案都能解决问题,那么最合适、最完美的python方法是什么?调用列表。排序,传递自定义键
:
list_values.sort(key=ordered_dict.get)
list_values
# ['key4', 'key1', 'key2', 'key0', 'key3']
或者,使用
sorted(list_values, key=ordered_dict.get)
# ['key4', 'key1', 'key2', 'key0', 'key3']
如果我们假设列表是dict的子集:
list_values = ['key3', 'key1']
ordered_dict = OrderedDict([('key4', 0), ('key1', 1), ('key2', 2), ('key0', 3), ('key3', 4)])
output = [v for v in ordered_dict if v in list_values]
print(output)
→
例2:
list_values = ['key3', 'key0', 'key1', 'key4', 'key2']
ordered_dict = OrderedDict([('key4', 0), ('key1', 1), ('key2', 2), ('key0', 3), ('key3', 4)])
output = [v for v in ordered_dict if v in list_values]
print(output)
→
回复:编辑。通常,首选非lambda解决方案。我可以对每个解决方案进行细分,但如果您能根据数据对解决方案进行计时,并接受最快的解决方案,则对您更有说服力。哦,是的,当然。请注意,list.sort
是一种就地方法,它速度更快,但也能将数据就地排序,因此请确保重置列表。嗯,这是迄今为止最好的答案。顺便说一句,在我的情况下,我将使用non-in-place选项,因为我想存储返回的排序列表。谢谢你,coldspeed
list_values = ['key3', 'key0', 'key1', 'key4', 'key2']
ordered_dict = OrderedDict([('key4', 0), ('key1', 1), ('key2', 2), ('key0', 3), ('key3', 4)])
output = [v for v in ordered_dict if v in list_values]
print(output)
['key4', 'key1', 'key2', 'key0', 'key3']