可能重复:
按指定非排序顺序的第三个列表对列表进行排序
a = [{'id':1}, {'id':2}, {'id':3}]
b = [2,1,3]
什么是通过属性dict
按list
b排序的好方法。id
结果应该是这样的
[{'id':2}, {'id':1}, {'id':3}]
可能重复:
按指定非排序顺序的第三个列表对列表进行排序
a = [{'id':1}, {'id':2}, {'id':3}]
b = [2,1,3]
什么是通过属性dict
按list
b排序的好方法。id
结果应该是这样的
[{'id':2}, {'id':1}, {'id':3}]
不需要 voodoo,只要您可以保证b
已填充了所有id
s in a
:
In [1]: a = [{'id':1}, {'id':2}, {'id':3}]
In [2]: b = [2,1,3]
In [3]: a.sort(key=lambda v : b.index(v['id']))
In [4]: a
Out[4]: [{'id': 2}, {'id': 1}, {'id': 3}]
(我经常被告知现在lambda
应该使用另一种方法,但这仍然是我知道的最清晰的方法)
编辑:另请注意,这与链接问题中的这个答案 几乎相同。
dictFromList = dict(zip((x['id'] for x in a), a))
sortedList = [dictFromList[i] for i in b]
蟒蛇 2.7:
def sort_dict_by_list(a, b):
sortkeys = { v: k for (k, v) in enumerate(b) }
return list(sorted(a, key=lambda x: sortkeys[x['id']]))
a = [{ 'id': 1, 'name': 'foo' }, { 'id': 2, 'name': 'bar' }, { 'id': 3, 'name': 'baz' }]
b = [2,1,3]
print sort_dict_by_list(a, b)
印刷:
[{'id': 2, 'name': 'bar'}, {'id': 1, 'name': 'foo'}, {'id': 3, 'name': 'baz'}]