python进阶之——对字典元素的命名,统计和排序

问题1:

python进阶之——对字典元素的命名,统计和排序_第1张图片

python进阶之——对字典元素的命名,统计和排序_第2张图片

form collections import namedtuple

Student=namedtuple('Student',['name','age','sex','email'])
s=Student('jim',10,'male','[email protected]')
s.name
s.age
s.sex
s.email

问题2:如何统计序列中元素出现的频度

python进阶之——对字典元素的命名,统计和排序_第3张图片

 方法1:

from random import randint
data=[randint(0,20) for _ in range(30)]
c=dict.fromkeys(data,0)#以列表中的每个元素作为key,0作为初始值创建一个字典
for x in data:
	c[x]+=1
#如果想找到出现频度最高的三个元素,需要对字典的元素进行排序。
c=sorted(c.items(),k=lambda x :x[1])

方法2:使用collections.Counter对象

from collections import Counter
c2=Counter(data)#直接可以得到方法一种像c一样的一个字典
#找到频度出现最高的三个元素
c2.most_common(3)

统计一篇英文文章的词频

improt re#导入正则表达式模块

#读入文件
txt=open("english.txt").read()
#通过正则表达式分割字符
c3=Counter(re.split("\w+",txt))#以非字母的格式进行分割
c3.most_common(10)#返回值是一个以元组为元素的列表

问题3:如何根据字典中值的大小对字典中的元素排序

方法:使用python内置函数sorted,内置函数算法比较好,而且内置函数是以c的速度运行的,速度快。

from random import randint
#通过列表解析来创建一个字典
d={x:randint(60,100) for x in 'xzcvbfd'}
#如果直接用sorted对d进行排序,他会得到一个排序好的键的列表,
#sorted方法中需要传入一个可迭代对象,对于字典的可迭代对象是键,通过下面两行代码可以看到d的可迭代对象是什么。
iter(d)
list(iter(d))
#如果想给value排序,需要将字典转换成一个元组,元组的比较一般是通过以此比较两个元组的第一个元素,
#第二个元组,如果第一个元素值相等再次比较第二个元素,如果第一个元素就能比较出结果,则直接返回。
#可以通过zip函数将字典转化成一个以元组为元素的列表。
zip(d.values(),d.keys())
#可以使用迭代key和values的迭代版本,来优化代码
d=sorted(zip(d.values(),d.keys()))

如果不适用zip函数,可以通过使用d.items()方法将字典转化成一个以元组为元素的列表[(key1,value2),(key2,value2)]

sorted(d.items(),key=lambda x : x[1])#匿名函数的意思是排序的是通过每个元组的第二个元素进行排序的。

 

你可能感兴趣的:(python基础学习)