【问题标题】:Sort list using dictionary key values使用字典键值对列表进行排序
【发布时间】:2019-01-21 20:33:47
【问题描述】:

假设我有一个列表来排序

list_values = ['key3', 'key0', 'key1', 'key4', 'key2']

还有一个命令字典

ordered_dict = OrderedDict([('key4', 0), ('key1', 1), ('key2', 2), ('key0', 3), ('key3', 4)])

如何使用ordered_dict 键相应地对list_values 进行排序?

即:-sorted_list = ['key4', 'key1', 'key2', 'key0', 'key3']

编辑:由于几乎所有答案都解决了问题,那么最合适和最完美的pythonic方式是什么?

【问题讨论】:

  • 回复:编辑。一般来说,非λ溶液是优选的。我可以对每个解决方案进行细分,但如果您可以根据您的数据对解决方案进行计时并接受最快的解决方案,这对您来说会更有说服力。
  • 哦,是的,当然..
  • 请注意,list.sort 是一种就地方法,速度更快但也可以就地对数据进行排序,因此请务必重置列表。

标签: python python-3.x list sorting


【解决方案1】:

调用list.sort,传递自定义key

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']

【讨论】:

  • 嗯,这是迄今为止最好的答案。顺便说一句,在我的情况下,我将使用非就地选项,因为我想存储返回的排序列表。谢谢@coldspeed
【解决方案2】:

如果我们假设列表是 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)

['key1', 'key3']

示例 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)

['key4', 'key1', 'key2', 'key0', 'key3']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多