python字典排序

1、python 字典按value排序

yuwen = {'JiaNaiLiang': 60, 'LiXiaoLu': 10, 'TianLaoShi': 44, 'MaSu': 99, 'KongLingHui': 98, 'LiuLaoShi': 77}

方法一: 排序之后返回的是字典

d.items()实际上是将d转换为可迭代对象,迭代对象的元素为 ('MaSu', 99), ('KongLingHui', 98), ('LiuLaoShi', 77), ('JiaNaiLiang', 60), ('TianLaoShi', 44), ('LiXiaoLu', 10)),items()方法将字典的元素 转化为了元组,而这里key参数对应的lambda表达式的意思则是选取元组中的第二个元素作为比较参数(如果写作key=lambda x:x[0]的话则是选取第一个元素作为比较对象,也就是key值作为比较对象。lambda x:y中x表示输出参数,y表示lambda 函数的返回值),所以采用这种方法可以对字典的value进行排序。注意排序后的返回值是一个list,而原字典中的名值对被转换为了list中的元组。

倒序:

dict(sorted(yuwen.items(), key=lambda x: x[1], reverse=True))

正序:

dict(sorted(yuwen.items(), key=lambda x: x[1])

结果

{'MaSu': 99, 'KongLingHui': 98, 'LiuLaoShi': 77, 'JiaNaiLiang': 60, 'TianLaoShi': 44, 'LiXiaoLu': 10}

不加dict

[('MaSu', 99), ('KongLingHui', 98), ('LiuLaoShi', 77), ('JiaNaiLiang', 60), ('TianLaoShi', 44), ('LiXiaoLu', 10)]

方法二:返回是值是列表内嵌套元组

import operator

倒序:

sorted(yuwen.items(),key = operator.itemgetter(1),reverse=True)

正序:

sorted(yuwen.items(),key = operator.itemgetter(1))

结果:

[('MaSu', 99), ('KongLingHui', 98), ('LiuLaoShi', 77), ('JiaNaiLiang', 60), ('TianLaoShi', 44), ('LiXiaoLu', 10)]

方法三:yuwen.values()在前面是按value值排序,如果key在前面是按key排序

f = zip(yuwen.values(),yuwen.keys())
sorted(f)

结果:

[(10, 'LiXiaoLu'), (44, 'TianLaoShi'), (60, 'JiaNaiLiang'), (77, 'LiuLaoShi'), (98, 'KongLingHui'), (99, 'MaSu')]

2、python 字典按key排序

方法一:

倒序:

sorted(yuwen.items(), key=lambda x: x[0], reverse=True)

正序:

  sorted(yuwen.items(), key=lambda x: x[0])

结果:

[('TianLaoShi', 44), ('MaSu', 99), ('LiuLaoShi', 77), ('LiXiaoLu', 10), ('KongLingHui', 98), ('JiaNaiLiang', 60)]

方法二:

print(sorted(yuwen.items(),key = operator.itemgetter(0),reverse=True))

方法三:

f=zip(yuwen.keys(),yuwen.values())
sorted(d)

3、只排key或value:

  --  dict.keys 排序  

  sorted(yuwen.keys())

  --  dict.keys 返回的是 dict_keys 对象,若需要转换为列表,才可以按列表取值

  list(yuwen.keys())[0] 

  --  dict.values 排序

   sorted(yuwen.values())

  --  dict.values 返回的是 dict_values 对象,若需要转换为列表,才可以取值

  list(yuwen.values())[0]
上班求生存,下班求发展
原文地址:https://www.cnblogs.com/ljf520hj/p/12784551.html