在Python中按特定顺序排序元素

17

如何按照自定义顺序进行排序?

输入:

[
    {value: "typeA"},
    {value: "typeC"},
    {value: "typeB"},
    {value: "typeC"},
    {value: "typeB"},
    {value: "typeA"}
]

期望结果:

[
    {value: "typeB"},
    {value: "typeB"},
    {value: "typeC"},
    {value: "typeC"},
    {value: "typeA"},
    {value: "typeA"}
]

my_own_order = ['typeB', 'typeC', 'typeA']

我现在的Python代码如下:

result = sorted(input, key=lambda v:v['value'])

1
给定的 inputresult 不是有效的 Python 字面量。如果你的意思是字典,它们应该是 {"xxx1": {"value": "typeA"}, "xxx2": {"value": "typeC"}, ...} 格式。 - falsetru
抱歉,请更新我的“input”和“result”。 - Ertuğrul Altınboğa
这只是一个例子。例如:按特定的项目列表“类型”排序。 - Ertuğrul Altınboğa
3个回答

39
>>> lst = [
...     {'value': "typeA"},
...     {'value': "typeC"},
...     {'value': "typeB"},
...     {'value': "typeC"},
...     {'value': "typeB"},
...     {'value': "typeA"}
... ]
>>> my_own_order = ['typeB', 'typeC', 'typeA']
typeBtypeCtypeA映射为0、1、2。
>>> order = {key: i for i, key in enumerate(my_own_order)}
>>> order
{'typeA': 2, 'typeC': 1, 'typeB': 0}

并使用该映射作为排序关键字:

>>> sorted(lst, key=lambda d: order[d['value']])
[{'value': 'typeB'},
 {'value': 'typeB'},
 {'value': 'typeC'},
 {'value': 'typeC'},
 {'value': 'typeA'},
 {'value': 'typeA'}]

7

试试这个:

sorted(input, key=lambda v: my_own_order.index(v['value']))

你打错字了,代码应该是: sorted(input, key=lambda v: my_own_order.index(v[value])) ('value' 两边不要加引号) - Linh
4
请注意,这种方法对每个项执行线性搜索。 - Ciro Santilli OurBigBook.com

1

输入数据并在my_order中设置顺序,它将按照该顺序打印

enter code here

user_input = input()
my_order = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1357902468'
print(*sorted(user_input, key=my_order.index),sep='')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接