python - 获取排序的索引列表,用于按给定键排序的字典列表

标签 python list sorting dictionary

我有一个包含多个键的字典列表,我想获得多个列表,每个列表都包含字典的索引,并按特定键排序。

例如,我有以下列表

a = [{"name": "Zoe", "age": 13}, {"name": "Adam", "age": 31}]

我知道我可以做到以下几点

from operator import itemgetter
sorted(a, key=itemgetter("name"))

获取以下信息

[{'name': 'Adam', 'age': 31}, {'name': 'Zoe', 'age': 13}]

但我真的希望能够获得两个带有索引的列表:

[1, 0] # order of the elements in `a` as sorted by name
[0, 1] # order of the elements in `a` as sorted by age

我的真实字典有更多的键值对,我返回 a 和附加列表的索引按不同的键排序而不是 a 的多个排序列表更有效

最佳答案

您可以通过生成 range() 生成一个排序的索引列表,然后调整排序键以将索引转换为字典中的特定值a 列表:

sorted(range(len(a)), key=lambda i: a[i]['name'])
sorted(range(len(a)), key=lambda i: a[i]['age'])

如果您预先知道键,只需循环并生成多个列表;您也许可以创建一个由每个排序键键入的字典:

{key: sorted(range(len(a)), key=lambda i: a[i][key]) for key in ('name', 'age')}

然后,上面的字典理解使您可以单独根据排序键访问每个排序列表:

>>> a = [{'name': "Zoe", 'age': 13}, {'name': "Adam", 'age': 31}]
>>> {key: sorted(range(len(a)), key=lambda i: a[i][key]) for key in ('name', 'age')}
{'age': [0, 1], 'name': [1, 0]}

关于python - 获取排序的索引列表,用于按给定键排序的字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33065385/

相关文章:

Python 按相同顺序对 2 个不同的 Size 列表进行排序?

python - 将Python列表元素分成两部分合并

python - 在 Python 中对多维列表进行深度排序的最有效/最干净的方法是什么?

c++ - std::sort 指针容器

python - 将列表字符串列表转换为Python中的日期以进行时间序列建模 -

python - 使用python从查询字符串中获取数据

python - 在Python中检索一个术语的第一个城市词典结果

c - "temp=*q"和 "temp->link=*q"之间的区别

Java lambda 交集两个列表并从结果中删除

java - 为什么 Collections.sort 使用合并排序而不是快速排序?