每日一python(4):python对字典按key排序和按value排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013003827/article/details/84318211

1、首先介绍一下字典的基本用法

        d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
	print(d.keys())
	print(d.values())
	print(d.items())
	sum = 0
	for key, value in d.items():
    	    sum = sum + value
    	    print(key, ':', value)
	print('平均分:', sum/len(d))

打印结果如下:

    dict_keys(['Bart', 'Lisa', 'Paul', 'Adam'])
    dict_values([59, 85, 74, 95])
    dict_items([('Bart', 59), ('Lisa', 85), ('Paul', 74), ('Adam', 95)])
    Bart : 59
    Lisa : 85
    Paul : 74
    Adam : 95
    平均分: 78.25

可以看到,items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value<

2、再来介绍一下sorted函数

sorted函数,语法:sorted(iterable,key,reverse),sorted一共有 iterable,key,reverse 这三个参数,其中:

  • iterable表示可以迭代的对象,例如可以是dict.items()、dict.keys()等,
  • key是一个函数,用来选取参与比较的元素,
  • reverse则是用来指定排序是倒序还是顺序,reverse=true则是倒序,reverse=false时则是顺序,默认时reverse=false

3、使用sorted函数对字典分别按key和按value进行排序

#coding:utf-8

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
print (sorted(d.items(), key=lambda d: d[0]))   #  按照key进行排序
print (sorted(d.items(), key=lambda d: d[1]))   #  按照value进行排序

结果:

[('Adam', 95), ('Bart', 59), ('Lisa', 85), ('Paul', 74)]
[('Bart', 59), ('Paul', 74), ('Lisa', 85), ('Adam', 95)]

这里的d.items()实际上是将d转换为可迭代对象,迭代对象的元素为 (‘Adam’,95)、(‘Lisa’,85)、(‘Bart’,59)、(‘Paul’,74),items()方法将字典的元素 转化为了元组,而这里key参数对应的lambda表达式的意思则是选取元组中的第几个元素作为比较参数

4、应用:如何统计数组中出现次数最多的数据,按出现次数由大到小排序

  • - 第1步:去重
  • - 第2步:计算每个对象在list里面出现的次数,保存为dict
  • - 第3步:保存为字典后,按字典的value值大小排序(由于dict是无序的,所以只能用list去排序,把dict的key和value保存为tuplue对象)
        ll = ["a", "b", "a", "c", "a", "c", "b", "d", "e", "c", "a", "c"]
	# 第1步:去重
	duixiang = set(ll) # 先去重,取出计数对象
	# 第2步:计算每个对象在list里面出现的次数,保存为dict
	dic = {}
	for i in duixiang:
    	    dic[i] = ll.count(i)   # count()方法用于统计某个元素在列表中出现的次数。
	# 第3步:保存为字典后,按字典的value值大小排序
	# 由于dict是无序的,所以只能用list去排序,把dict的key和value保存为tuplue对象
	ll = sorted(dic.items(), key=lambda x: x[1], reverse=True)
	print(ll)

结果:

    [('c', 4), ('a', 4), ('b', 2), ('d', 1), ('e', 1)]

猜你喜欢

转载自blog.csdn.net/u013003827/article/details/84318211