【问题标题】:Sort elements with specific order in python在python中按特定顺序对元素进行排序
【发布时间】:2016-03-22 09:20:46
【问题描述】:

如何按自定义顺序排序?

输入:

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

【问题讨论】:

  • 鉴于input,result 不是有效的 Python 文字。如果你指的是字典,它们应该是{"xxx1": {"value": "typeA"}, "xxx2": {"value": "typeC"}, ...} 格式。
  • 抱歉,更新我的input 和result
  • 这只是一个例子。例如:按特定项目列表排序type。

标签: python list sorting dictionary


【解决方案1】:
>>> lst = [
...     {'value': "typeA"},
...     {'value': "typeC"},
...     {'value': "typeB"},
...     {'value': "typeC"},
...     {'value': "typeB"},
...     {'value': "typeA"}
... ]
>>> my_own_order = ['typeB', 'typeC', 'typeA']

在typeB、typeC、typeA 到 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'}]

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

    • 你有一个错字,代码应该是:sorted(input, key=lambda v: my_own_order.index(v[value]))('value'周围没有引号)
    • 请注意,此方法对每个项目进行线性搜索。
    【解决方案3】:

    接受输入并在 my_order 中设置顺序,它将按该顺序打印

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

    【讨论】:

      猜你喜欢
      • 2019-09-01
      • 2016-11-01
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 2021-02-10
      相关资源
      最近更新 更多