在进入正文之前,让我们先以 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])
对键排序前要先获得键的列表:
>>> 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}
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]))
按值排序必须绑定键进行排序,否则根据值无法获取键。这里我们采用 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)]
之后采用 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)]
然后使用 字典生成方法 即可生成字典:
>>> {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}
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 的使用方法和应用,敬请关注后续更新~