当前位置: 首页 > 面试题库 >

自定义排序Python字典

姜松
2023-03-14
问题内容

所以我有一个字典,打印时看起来像这样:

{'10': -10, 'ZT21': 14, 'WX21': 12, '2': 15, '5': -3, 'UM': -25}

我想以我定义的自定义方式对它们进行排序。假设我希望按键排序的方式是ZT21, 10, WX21, UM, 5, 2

有人知道如何以预定义/自定义的方式整理字典吗?我正在做的是从数据库中获取此词典,它可以带有20多个键,所有键都有特定的顺序。总是设置顺序,但有时某些键/值不会出现在字典中。所以这也可能发生:

{'ZT21': 14, 'WX21': 12, '2': 15, '5': -3, 'UM': -25}

(按键排序)为ZT21, 10, WX21, UM, 5, 2

因此,在此示例中不存在10,但是我需要的排序仍然相同,仅缺少10。

有任何想法吗?


问题答案:

Python中的字典是无序的。您可以将所需的结果作为list

>>> d = {'10': -10, 'ZT21': 14, 'WX21': 12, '2': 15, '5': -3, 'UM': -25}
>>> keyorder = ['ZT21', '10', 'WX21', 'UM', '5', '2']
>>> sorted(d.items(), key=lambda i:keyorder.index(i[0]))
[('ZT21', 14), ('10', -10), ('WX21', 12), ('UM', -25), ('5', -3), ('2', 15)]

或作为OrderedDict

>>> from collections import OrderedDict
>>> OrderedDict(sorted(d.items(), key=lambda i:keyorder.index(i[0])))
OrderedDict([('ZT21', 14), ('10', -10), ('WX21', 12), ('UM', -25), ('5', -3), ('2', 15)])

如果您要执行许多操作,则将adict用作键阶会更有效

>>> keyorder = {k:v for v,k in enumerate(['ZT21', '10', 'WX21', 'UM', '5', '2'])}
>>> OrderedDict(sorted(d.items(), key=lambda i:keyorder.get(i[0])))
OrderedDict([('ZT21', 14), ('10', -10), ('WX21', 12), ('UM', -25), ('5', -3), ('2', 15)])


 类似资料:
  • 问题内容: 我有一个问题:这是由ElementTree库形成的列表列表。 word1..4可能包含Unicode字符,即(â,ü,ç)。 我想按我的自定义字母对列表列表进行排序。 我知道如何从这里按python中的单词对自定义字母进行排序 我也知道如何从此处http://wiki.python.org/moin/HowTo/Sorting按键排序 问题是我找不到如何应用这两种方法对“列表列表”进行

  • 问题内容: 我正在使用ElasticSearch 2.4.2(通过Java的HibernateSearch 5.7.1.Final)。 我对字符串排序有问题。我的应用程序的语言带有变音符号,它们具有特定的字母顺序。例如,直接在after之后,在after之后,等等。因此,您应该对字符串进行如下排序: ElasticSearch首先按典型字母排序,然后将所有奇怪的字母移到最后: 我可以为Elasti

  • 问题内容: 我有这样的查询: 但是,当我打印出来时,它会自动进行1,2,3,4,5的排序。我们如何在不更改数据库结构的情况下保持顺序(2,4,1,5,3)? 谢谢! 问题答案: 我问这个: mysql按问题排序 我得到的答案和所有功劳归于他们: 您可以使用CASE运算符指定顺序: 在PHP中,你可以像这样:

  • 有的时候我们希望排序不是仅仅按照自然顺序排序。例如,我们希望按照字符串的长度来对一个字符串数组排序而不是按照字母顺序来排序。这里我们介绍一下Go的自定义排序。 package main import "sort" import "fmt" // 为了能够使用自定义函数来排序,我们需要一个 // 对应的排序类型,比如这里我们为内置的字符串 // 数组定义了一个别名ByLength type ByLe

  • 根据字典顺序和自定义顺序对字符串数组进行排序(一种排列形式)。这是代码: 问题是,当我对一些输入运行此命令时,输出是正确的,而对于其他输入,输出是不正确的。我一直在调试它,但没有找到错误。 编辑: 阿德里安娜正在玩英文字母表。当她玩完字母表后,她意识到她把字母的位置弄乱了。现在,给定一组单词,她想知道根据她制作的新字母表排序,这些单词的字典排序是什么。 换句话说,给定英语字母表E和一组单词S的排列

  • 问题内容: 我有,其中一列包含月份名称。 如何使用字典进行自定义排序,例如: 问题答案: 首先,将月份列设为分类,然后指定要使用的顺序。 现在,当你对月份列进行排序时,它将相对于该列表进行排序: 注意:如果值不在列表中,它将被转换为NaN。 对于那些有兴趣的人来说,是一个较旧的答案 你可以创建一个中间系列,并set_index在此基础上: 如前所述,在新的熊猫中,Series可以replace更优