我在Python中有一个dicts列表,让我们说:
mylist = [{key1: value1, key2: value2}, {key1: value3, key2: value4}, {key1: value5, key2: 'something else'},]
我希望按照预定义的顺序排列该列表
x = ['something else', value4, value2]
修改
我的预期结果是
mylist = [{key1: value5, key2: 'something else'}, {key1: value3, key2: value4}, {key1: value1, key2: value2}, ]
所以它基本上按照列表 x 的顺序在 key2 上对此列表进行排序。抱歉缺乏明确性。
我发现的所有内容都是按字母顺序或数字顺序排序,而不是按特殊顺序排序。任何帮助都非常感谢。
亲切的问候 奥利弗
答案 0 :(得分:2)
使用sort函数可以做到。你需要钥匙来定义订单。
>>> mylist
[{1: 1, 2: 2}, {1: 3, 2: 4}, {1: 5, 2: 'something else'}]
>>> x
['something else', 4, 2]
>>> sorted( mylist, key = lambda item: sum([ x.index(i) if i in x else len(x) for i in item.values()]) )
[{1: 5, 2: 'something else'}, {1: 3, 2: 4}, {1: 1, 2: 2}]
- update--
如果你想按第二个值排序
sorted( mylist, key = lambda item: x.index(item[item.keys()[1]]) )
答案 1 :(得分:0)
你可能想要某种lambda:
>>> l = [1,5,2,6]
>>> sorted(l,cmp=lambda x,y:x-y)
[1,2,5,6]
>>> sorted(l,cmp=lambda x,y:y-x)
[6,5,2,1]
只需修改lambda以某种方式比较两个值