1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【python】字典按键 按值排序

【python】字典按键 按值排序

时间:2023-05-12 18:09:13

相关推荐

【python】字典按键 按值排序

全文一览

一、按键排序1.1 思路解析1.2 方法总结 二、按值排序2.1 思路解析2.1.1 生成键值对元组列表2.1.2 对键值对元组列表排序2.1.3 根据列表生成字典 2.2 方法总结

python 中的字典默认是无序的,而许多应用场景中需要对字典的键、值进行排序,因此 python 中的字典排序也就成为了面试中的高频话题。

在进入正文之前,让我们先以 name为 键、以 age 为值 创建字典:

d = {'Caitlyn': 21, 'Darius': 45, 'Bard': 33, 'Ezreal': 24, 'Akali': 31, 'Fiora': 43}

如何按照键、值分别对字典进行排序呢?

>>> d.keys()dict_keys(['Caitlyn', 'Darius', 'Bard', 'Ezreal', 'Akali', 'Fiora'])>>> d.values()dict_values([21, 45, 33, 24, 31, 43])

一、按键排序

1.1 思路解析

对键排序前要先获得键的列表:

>>> list(d.keys())['Caitlyn', 'Darius', 'Bard', 'Ezreal', 'Akali', 'Fiora']

通过 sorted 对列表进行排序:

>>> sorted(list(d.keys())) ['Akali', 'Bard', 'Caitlyn', 'Darius', 'Ezreal', 'Fiora']

python 中的 sorted 支持直接对键排序:

>>> sorted(d.keys()) ['Akali', 'Bard', 'Caitlyn', 'Darius', 'Ezreal', 'Fiora']

如果是逆序,设置 “reverse=True”即可

>>> sorted(d.keys(), reverse=True) ['Fiora', 'Ezreal', 'Darius', 'Caitlyn', 'Bard', 'Akali']

之后,配合 生成式 即可实现有序字典的生成:

>>> {k:d[k] for k in sorted(d.keys())} {'Akali': 31, 'Bard': 33, 'Caitlyn': 21, 'Darius': 45, 'Ezreal': 24, 'Fiora': 43}>>> dict(sorted(d.items())) {'Akali': 31, 'Bard': 33, 'Caitlyn': 21, 'Darius': 45, 'Ezreal': 24, 'Fiora': 43}

1.2 方法总结

dict(sorted(d.items()))dict(sorted(list(d.items())))dict(sorted(list(dic.items()),key=lambda x:x[0])){k:d[k] for k in sorted(d.keys())} {k:d[k] for k in sorted(list(d.keys()))} dict(sorted([(k,v) for k,v in d.items()])dict(sorted([(k,v) for k,v in d.items()],key=lambda x:x[0]))

二、按值排序

2.1 思路解析

2.1.1 生成键值对元组列表

按值排序必须绑定键进行排序,否则根据值无法获取键。这里我们采用 zip 构建生成器进行绑定:

>>> zip(d.keys(),d.values())<zip object at 0x000001F676EF8840>

然后将其转换化为列表,用于后续排序:

>>> list(zip(d.keys(),d.values()))[('Caitlyn', 21), ('Darius', 45), ('Bard', 33), ('Ezreal', 24), ('Akali', 31), ('Fiora', 43)]

以上两步也可以采用元组列表实现键值的绑定:

>>> [(k,d[k]) for k in d.keys()] [('Caitlyn', 21), ('Darius', 45), ('Bard', 33), ('Ezreal', 24), ('Akali', 31), ('Fiora', 43)]

2.1.2 对键值对元组列表排序

之后采用 sorted 方法指定按照元组按值(x[1])进行排序:

>>> sorted([(k,d[k]) for k in d.keys()], key=lambda x:x[1])[('Caitlyn', 21), ('Ezreal', 24), ('Akali', 31), ('Bard', 33), ('Fiora', 43), ('Darius', 45)]

还可以对 list(zip()) 进行排序:

>>> sorted(list(zip(d.keys(), d.values())), key=lambda x:x[1]) [('Caitlyn', 21), ('Ezreal', 24), ('Akali', 31), ('Bard', 33), ('Fiora', 43), ('Darius', 45)]

python 还支持对 zip() 直接排序:

>>> sorted(zip(d.keys(), d.values()), key=lambda x:x[1]) [('Caitlyn', 21), ('Ezreal', 24), ('Akali', 31), ('Bard', 33), ('Fiora', 43), ('Darius', 45)]

要想设置按照年龄降序,可以使用 reverse=True:

>>> sorted([(k,d[k]) for k in d.keys()], key=lambda x:x[1], reverse=True) [('Darius', 45), ('Fiora', 43), ('Bard', 33), ('Akali', 31), ('Ezreal', 24), ('Caitlyn', 21)]

2.1.3 根据列表生成字典

然后使用 字典生成方法 即可生成字典:

>>> {tup[0]:tup[1] for tup in sorted([(k,d[k]) for k in d.keys()], key=lambda x:x[1])} {'Caitlyn': 21, 'Ezreal': 24, 'Akali': 31, 'Bard': 33, 'Fiora': 43, 'Darius': 45}

2.2 方法总结

dict(sorted(d.items(),key=lambda x:x[1]))dict(sorted(list(d.items()),key=lambda x:x[1]))dict(sorted([(k,v) for k,v in d.items()],key=lambda x:x[1])){k:v for (k,v) in sorted(zip(d.keys(),d.values()), key=lambda x:x[1])}{k:v for (k,v) in sorted(list(zip(d.keys(),d.values())), key=lambda x:x[1])}{k:v for (k,v) in sorted([(k,d[k]) for k in d.keys()], key=lambda x:x[1])}{k:d[k] for (k,v) in sorted([(k,d[k]) for k in d.keys()], key=lambda x:x[1])}{tup[0]:tup[1] for tup in sorted([(k,d[k]) for k in d.keys()], key=lambda x:x[1])}{tup[0]:d[tup[0]] for tup in sorted([(k,d[k]) for k in d.keys()], key=lambda x:x[1])}

推荐阅读:

【python】创建字典方法汇总

【python】生成式的使用

更多 python 的使用方法和应用,敬请关注后续更新~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。