首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:如何按值和索引对字典列表进行排序

Python:如何按值和索引对字典列表进行排序
EN

Stack Overflow用户
提问于 2018-08-10 06:54:32
回答 2查看 5.3K关注 0票数 2

我有一个数据字典的列表,它在一些地方是有序的,在另一些地方是无序的:

例如:

代码语言:javascript
复制
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}]

我想对它们进行如下排序:

代码语言:javascript
复制
 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}]

其中我的排序是项目的索引和第二个值的某种组合,我认为排序应该是:

代码语言:javascript
复制
key=[(2nd value)<<len(closest power of 2 to len(index)) + index]

我可以使用以下命令按第二个值对字典列表进行排序:

代码语言:javascript
复制
data.sort(key= lambda x:x['value'])

如何添加字典的索引?

有没有更好的排序键我可以用?

EN

回答 2

Stack Overflow用户

发布于 2018-08-10 07:22:54

使用enumerate获取索引并使用该索引进行排序

代码语言:javascript
复制
>>> 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

代码语言:javascript
复制
>>> 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}]
>>> 
票数 3
EN

Stack Overflow用户

发布于 2018-08-10 06:57:27

你有没有试过这个:

代码语言:javascript
复制
sorted(data, key=lambda x: x['value']) 
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51776799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档