python按自定义顺序排序字典列表

标签 python list sorting dictionary lambda

<分区>

我已经搜索过我们可以使用 sorted 按字母顺序按键对字典列表进行排序,但是它是按自定义顺序排序吗?

例如:

alist = [
{"id":"A","day":"sun"},
{"id":"B","day":"tue"},
{"id":"C","day":"mon"}
]

根据自定义顺序中的“天”对列表进行排序,即 “sun”、“mon”、“tue”.....“sat”

sortedalist = [
{"id":"A","day":"sun"},
{"id":"C","day":"mon"}
{"id":"B","day":"tue"}
]

我该怎么做?我认为需要 lambda 表达式作为 sorted() 中的键,但我不确定函数应该是什么

最佳答案

您可以在字典中定义自定义排序顺序

sortorder={"sun":0, "mon":1, "tue":2, "wed":3, "thu":4, "fri":5, "sat":6}

然后在排序函数中使用它:

my_list.sort(key=lambda x: sortorder[x["day"]])

这会在不返回副本的情况下对列表进行就地排序。

如果你需要一个已排序列表的副本,那么你可以使用

sorted_list=sorted(my_list, key=lambda x: sortorder[x["day"]])

在原题中,list的变量名叫做list。请注意,调用列表 list 是一种不好的做法,因为 python 内部结构已被此覆盖。

关于python按自定义顺序排序字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50297639/

相关文章:

内置 "in"算子的Python源码

r - 如何减少 R 列表中的值

python - 包含多个条件的列表

c# - 有没有办法在 C# 中通过引用对对象进行一致的排序/排序?

python - 使用更少的内存,沿特定轴对 numpy 数组按另一个数组进行排序

python - 测试 ProtoBuf 值是否使用默认值

Python 替换为重用未知字符串

python - 基于用户输入的菱形形状

c# - 我在 C# 中有两个列表 Found Missed Element count 和 Founded Element Count

arrays - 查找按升序排序的矩阵的列索引和行索引