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

标签 python sorting

我有一个数据字典列表,在某些地方是有序的,而在其他地方是乱序的:

例如:

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

如何同时添加字典索引?

我可以使用更好的排序键吗?

最佳答案

您似乎正在寻找 text 字段作为辅助排序键。最简单的方法是按优先顺序简单地为您的键使用一个元组:

sorted(data, key=lambda x: (x['value'], x['text']) ) 

这会产生您需要的结果吗?输出:

[{'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': 'b', 'value': 50}, {'text': 'k', 'value': 50}, {'text': 'y', 'value': 52}]

值 (k, 50) 和 (b, 50) 现在的顺序相反;我希望我能正确读懂你的想法。


根据 OP 说明进行更新

我检查了文档。 Python 的 sort 方法是稳定的,因此您根本不需要第二个排序键:如果出现平局,sort 将保持原始顺序:

>>> data.sort(key= lambda x:x['value'])
>>> 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}]

...这就是您的要求。

关于Python:如何按值和索引对字典列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51776799/

相关文章:

python - 正斜杠后面直接加句号的目的是什么?

python - pandas to_html 无值表示

python - 为什么排序列表检测在这种情况下不起作用?

bash - GNU 排序空列的不一致行为

Java 字符串数组

sql-server - 如何按字母顺序对字符串进行排序

c++ - 在保留列的同时对二维 vector 进行排序

python - python读取文件并打印出1、2、3、4字母的单词数

python - 向/从 Python 和 C 传递 2D 可变长度数组的好方法?

python - 检查 Django 中的 OneToOneField 是否为 None