我有一个数据字典的列表,它在一些地方是有序的,在另一些地方是无序的:
例如:
data = [{"text":'a', "value":1},
{"text":'b', "value":1},
{"text":'j', "value":2},
{"text":'k', "value":50},
{"text":'b', "value":50},
{"text":'y', "value":52},
{"text":'x', "value":2},
{"text":'k', "value":3},
{"text":'m', "value":3}]
我想对它们进行如下排序:
o = [{"text":'a', "value":1},
{"text":'b', "value":1},
{"text":'j', "value":2},
{"text":'x', "value":2},
{"text":'k', "value":3},
{"text":'m', "value":3},
{"text":'k', "value":50},
{"text":'b', "value":50},
{"text":'y', "value":52}]
其中我的排序是项目的索引和第二个值的某种组合,我认为排序应该是:
key=[(2nd value)<<len(closest power of 2 to len(index)) + index]
我可以使用以下命令按第二个值对字典列表进行排序:
data.sort(key= lambda x:x['value'])
如何添加字典的索引?
有没有更好的排序键我可以用?
发布于 2018-08-10 07:22:54
使用enumerate
获取索引并使用该索引进行排序
>>> res = [d for i,d in sorted(enumerate(data), key=lambda i_d: (i_d[1]['value'], i_d[0]))]
>>> pprint(res)
[{'text': 'a', 'value': 1},
{'text': 'b', 'value': 1},
{'text': 'j', 'value': 2},
{'text': 'x', 'value': 2},
{'text': 'k', 'value': 3},
{'text': 'm', 'value': 3},
{'text': 'k', 'value': 50},
{'text': 'b', 'value': 50},
{'text': 'y', 'value': 52}]
要就地对其进行排序,可以尝试使用itertools.count
>>> from itertools import count
>>> cnt=count()
>>> data.sort(key=lambda d: (d['value'], next(cnt)))
>>> pprint(data)
[{'text': 'a', 'value': 1},
{'text': 'b', 'value': 1},
{'text': 'j', 'value': 2},
{'text': 'x', 'value': 2},
{'text': 'k', 'value': 3},
{'text': 'm', 'value': 3},
{'text': 'k', 'value': 50},
{'text': 'b', 'value': 50},
{'text': 'y', 'value': 52}]
>>>
发布于 2018-08-10 06:57:27
你有没有试过这个:
sorted(data, key=lambda x: x['value'])
https://stackoverflow.com/questions/51776799
复制相似问题