使用另一个字典列表中的键对字典列表进行排序

明升

在下面的示例中,我想按类别的字母顺序对动物进行排序,该类别存储在 order 字典中。

category = [{'uid': 0, 'name': 'mammals'},
            {'uid': 1, 'name': 'birds'},
            {'uid': 2, 'name': 'fish'},
            {'uid': 3, 'name': 'reptiles'},
            {'uid': 4, 'name': 'invertebrates'},
            {'uid': 5, 'name': 'amphibians'}]

animals = [{'name': 'horse', 'category': 0},
           {'name': 'whale', 'category': 2},
           {'name': 'mollusk', 'category': 4},
           {'name': 'tuna ', 'category': 2},
           {'name': 'worms', 'category': 4},
           {'name': 'frog', 'category': 5},
           {'name': 'dog', 'category': 0},
           {'name': 'salamander', 'category': 5},
           {'name': 'horse', 'category': 0},
           {'name': 'octopus', 'category': 4},
           {'name': 'alligator', 'category': 3},
           {'name': 'monkey', 'category': 0},
           {'name': 'kangaroos', 'category': 0},
           {'name': 'salmon', 'category': 2}]

sorted_animals = sorted(animals, key=lambda k: (k['category'])

我怎么能做到这一点?谢谢。

马丁·彼得斯

您现在正在对类别 ID 进行排序。您需要做的就是将该 id 映射到给定category名称的查找

首先为类别创建一个字典,以便您可以直接将数字 id 映射到category列表中的关联名称,然后在排序时使用该映射:

catuid_to_name = {c['uid']: c['name'] for c in category}

sorted_animals = sorted(animals, key=lambda k: catuid_to_name[k['category']])

演示:

>>> from pprint import pprint
>>> category = [{'uid': 0, 'name': 'mammals'},
...             {'uid': 1, 'name': 'birds'},
...             {'uid': 2, 'name': 'fish'},
...             {'uid': 3, 'name': 'reptiles'},
...             {'uid': 4, 'name': 'invertebrates'},
...             {'uid': 5, 'name': 'amphibians'}]
>>> animals = [{'name': 'horse', 'category': 0},
...            {'name': 'whale', 'category': 2},
...            {'name': 'mollusk', 'category': 4},
...            {'name': 'tuna ', 'category': 2},
...            {'name': 'worms', 'category': 4},
...            {'name': 'frog', 'category': 5},
...            {'name': 'dog', 'category': 0},
...            {'name': 'salamander', 'category': 5},
...            {'name': 'horse', 'category': 0},
...            {'name': 'octopus', 'category': 4},
...            {'name': 'alligator', 'category': 3},
...            {'name': 'monkey', 'category': 0},
...            {'name': 'kangaroos', 'category': 0},
...            {'name': 'salmon', 'category': 2}]
>>> catuid_to_name = {c['uid']: c['name'] for c in category}
>>> pprint(catuid_to_name)
{0: 'mammals',
 1: 'birds',
 2: 'fish',
 3: 'reptiles',
 4: 'invertebrates',
 5: 'amphibians'}
>>> sorted_animals = sorted(animals, key=lambda k: catuid_to_name[k['category']])
>>> pprint(sorted_animals)
[{'category': 5, 'name': 'frog'},
 {'category': 5, 'name': 'salamander'},
 {'category': 2, 'name': 'whale'},
 {'category': 2, 'name': 'tuna '},
 {'category': 2, 'name': 'salmon'},
 {'category': 4, 'name': 'mollusk'},
 {'category': 4, 'name': 'worms'},
 {'category': 4, 'name': 'octopus'},
 {'category': 0, 'name': 'horse'},
 {'category': 0, 'name': 'dog'},
 {'category': 0, 'name': 'horse'},
 {'category': 0, 'name': 'monkey'},
 {'category': 0, 'name': 'kangaroos'},
 {'category': 3, 'name': 'alligator'}]

请注意,在每个 category 中,字典已按相对输入顺序保留。您可以从排序键返回一组值,以进一步在每个类别中应用排序顺序,例如:

sorted_animals = sorted(
    animals,
    key=lambda k: (catuid_to_name[k['category']], k['name'])
)

将按每个类别中的动物名称排序,产生:

>>> pprint(sorted(animals, key=lambda k: (catuid_to_name[k['category']], k['name'])))
[{'category': 5, 'name': 'frog'},
 {'category': 5, 'name': 'salamander'},
 {'category': 2, 'name': 'salmon'},
 {'category': 2, 'name': 'tuna '},
 {'category': 2, 'name': 'whale'},
 {'category': 4, 'name': 'mollusk'},
 {'category': 4, 'name': 'octopus'},
 {'category': 4, 'name': 'worms'},
 {'category': 0, 'name': 'dog'},
 {'category': 0, 'name': 'horse'},
 {'category': 0, 'name': 'horse'},
 {'category': 0, 'name': 'kangaroos'},
 {'category': 0, 'name': 'monkey'},
 {'category': 3, 'name': 'alligator'}]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据python中另一个字典键的匹配来修改字典中的键值列表?

来自分类Dev

如何将字典中的键与列表中的元素进行匹配,并将这些键值存储到python中的另一个字典中?

来自分类Dev

将包含列表的字典追加到python中的另一个字典

来自分类Dev

如何使用与另一个列表的比较来对列表中的字典进行排序

来自分类Dev

根据另一个字典排序列表

来自分类Dev

将一个字典中的空列表的键与另一个包含该键作为值的字典合并后,找到最小的集合

来自分类Dev

如何基于Python中的匹配键将键值对添加到另一个字典列表中的现有字典列表中

来自分类Dev

Python将字典列表转换为另一个字典列表

来自分类Dev

Python将字典列表转换为另一个字典列表

来自分类Dev

将字典中的值列表除以另一个字典中的值列表

来自分类Dev

如何有效地将字典中的字符串列表与Python中的另一个字典列表进行比较?

来自分类Dev

通过使用另一个字典键和值构造一个字典

来自分类Dev

将字典和列表相交以返回另一个字典

来自分类Dev

当值与列表中的文件匹配时,用另一个字典替换字典中的项目

来自分类Dev

将字典中的键复制到另一个字典

来自分类Dev

如何使用 if 语句作为字典键并填充另一个字典?

来自分类Dev

使用键,一个字典中的值来获取python中另一个字典中的值

来自分类Dev

将字典的值列表替换为另一个字典中的对应键值映射

来自分类Dev

将字典的值(列表)与另一个列表进行比较时更改字典的键

来自分类Dev

识别一个字典中的键,并使用它来修改另一个字典的值

来自分类Dev

如何映射键,在另一个字典中查找键?

来自分类Dev

使用Python将1个字典的值与另一个字典的键匹配

来自分类Dev

创建一个值与另一个字典中的键相同的字典

来自分类Dev

在Django模板的另一个字典中迭代一个键的字典

来自分类Dev

如何从另一个 python 字典中获取一个字典中的相应列表值,其中它们被列为键,比较并打印出一个 csv?

来自分类Dev

创建一个字典,该字典使用来自另一个字典的相同对,但键被翻译

来自分类Dev

如何遍历字典中的键并与另一个字典中的键/值匹配

来自分类Dev

Ansible-检查列表中的元素在另一个字典中是否没有相同的值

来自分类Dev

使用另一个字符串列表对字符串列表进行排序

Related 相关文章

  1. 1

    如何根据python中另一个字典键的匹配来修改字典中的键值列表?

  2. 2

    如何将字典中的键与列表中的元素进行匹配,并将这些键值存储到python中的另一个字典中?

  3. 3

    将包含列表的字典追加到python中的另一个字典

  4. 4

    如何使用与另一个列表的比较来对列表中的字典进行排序

  5. 5

    根据另一个字典排序列表

  6. 6

    将一个字典中的空列表的键与另一个包含该键作为值的字典合并后,找到最小的集合

  7. 7

    如何基于Python中的匹配键将键值对添加到另一个字典列表中的现有字典列表中

  8. 8

    Python将字典列表转换为另一个字典列表

  9. 9

    Python将字典列表转换为另一个字典列表

  10. 10

    将字典中的值列表除以另一个字典中的值列表

  11. 11

    如何有效地将字典中的字符串列表与Python中的另一个字典列表进行比较?

  12. 12

    通过使用另一个字典键和值构造一个字典

  13. 13

    将字典和列表相交以返回另一个字典

  14. 14

    当值与列表中的文件匹配时,用另一个字典替换字典中的项目

  15. 15

    将字典中的键复制到另一个字典

  16. 16

    如何使用 if 语句作为字典键并填充另一个字典?

  17. 17

    使用键,一个字典中的值来获取python中另一个字典中的值

  18. 18

    将字典的值列表替换为另一个字典中的对应键值映射

  19. 19

    将字典的值(列表)与另一个列表进行比较时更改字典的键

  20. 20

    识别一个字典中的键,并使用它来修改另一个字典的值

  21. 21

    如何映射键,在另一个字典中查找键?

  22. 22

    使用Python将1个字典的值与另一个字典的键匹配

  23. 23

    创建一个值与另一个字典中的键相同的字典

  24. 24

    在Django模板的另一个字典中迭代一个键的字典

  25. 25

    如何从另一个 python 字典中获取一个字典中的相应列表值,其中它们被列为键,比较并打印出一个 csv?

  26. 26

    创建一个字典,该字典使用来自另一个字典的相同对,但键被翻译

  27. 27

    如何遍历字典中的键并与另一个字典中的键/值匹配

  28. 28

    Ansible-检查列表中的元素在另一个字典中是否没有相同的值

  29. 29

    使用另一个字符串列表对字符串列表进行排序

热门标签

归档