为了账号安全,请及时绑定邮箱和手机立即绑定

如果字典出现一次,则按值对字典进行排序,否则按键

如果字典出现一次,则按值对字典进行排序,否则按键

米脂 2021-09-28 20:58:06
我有这本字典,我需要按值对单词进行排序。但是当两个或多个单词具有相同的值时,我需要按字母表对这些单词进行排序,但我不知道该怎么做。你能帮我吗?dict = {'BLACK': 0, 'brown': 1, 'RED': 2, 'orange': 4, 'YELLOW': 7, 'green': 5, 'BLUE': 4,         'violet': 2, 'GRAY': 3, 'White': 6}先感谢您
查看完整描述

3 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

你可以试试这个:


>>> d = {'BLUE': 4, 'brown': 1, 'BLACK': 0, 'YELLOW': 7, 'violet': 2, 'orange': 4, 'green': 5, 'White': 6, 'GRAY': 3, 'RED': 2}

>>> t = (zip(d.values(), d.keys()))

>>> sorted(t)

[(0, 'BLACK'), (1, 'brown'), (2, 'RED'), (2, 'violet'), (3, 'GRAY'), (4, 'BLUE'), (4, 'orange'), (5, 'green'), (6, 'White'), (7, 'YELLOW')]



查看完整回答
反对 回复 2021-09-28
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

使用sorted:


>>> d = {'BLACK': 0, 'brown': 1, 'RED': 2, 'orange': 4, 'YELLOW': 7, 'green': 5, 'BLUE': 4,

        'violet': 2, 'GRAY': 3, 'White': 6}

>> sorted(d, key=lambda i: (d[i], i.lower()))

['BLACK', 'brown', 'RED', 'violet', 'GRAY', 'BLUE', 'orange', 'green', 'White', 'YELLOW']

注意:这假设所有内容都应该是小写的,因为 python 在小写单词之前对大写单词进行排序。


我也将您的变量重命名为d因为dict是内置变量。


分解正在发生的事情:


sorted在字典上返回按key提供的函数排序的键(默认是键的直接比较)


>>> sorted(d)

['BLACK', 'BLUE', 'GRAY', 'RED', 'White', 'YELLOW', 'brown', 'green', 'orange', 'violet']

要按值排序,请使用dict.get:


>>> sorted(d, key=d.get)

['BLACK', 'brown', 'RED', 'violet', 'GRAY', 'orange', 'BLUE', 'green', 'White', 'YELLOW']

然后我们必须按键排序,以防出现平局。因为 python 一个一个比较它的元组,我们可以构造一个元组,(value, key)它会比较项目,如果它们相同,它会比较项目。


>>> (4, "blue") < (4, "orange")

True

>>> (4, "blue") < (3, "orange")

False


查看完整回答
反对 回复 2021-09-28
?
慕慕森

TA贡献1856条经验 获得超17个赞

使用collections.OrderedDict,您可以构造一个有序映射,该映射仍然具有字典的优点,例如 O(1) 查找。


from collections import OrderedDict


d = {'BLACK': 0, 'brown': 1, 'RED': 2, 'orange': 4, 'YELLOW': 7,

     'green': 5, 'BLUE': 4, 'violet': 2, 'GRAY': 3, 'White': 6}


od = OrderedDict(sorted(d.items(), key=lambda x: (x[1], x[0].casefold())))


print(od)


OrderedDict([('BLACK', 0), ('brown', 1), ('RED', 2), ('violet', 2), ('GRAY', 3),

             ('BLUE', 4), ('orange', 4), ('green', 5), ('White', 6), ('YELLOW', 7)])

由于您同时使用键和值进行排序,因此使用来自dict.items. 此外,str.casefold用于不区分大小写的排序。


最后,永远不要隐藏诸如dict. 使用dict_ord代替变量名。


查看完整回答
反对 回复 2021-09-28
  • 3 回答
  • 0 关注
  • 240 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号