Python——字典类型理论及应用实例

字典类型字典类型理论及应用实例

一、字典类型理论

1、使用大括号({})建立,每一个元素是一个键值对,使用方法如下:

{<键1>:<值1>, <键2>:<值2>, ... ,<键n>:<值n>}

可以简单地把字典看成元素是键值对的集合。
字典的索引

<值> = <字典变量>[<键>]
>>> d = {"201801": '小明',"201802": '小红',"201803": '小白'}
>>> print(d["201802"])
小红
>>> d["201802"] = '新小红'
>>> print(d)
{'201802': '新小红', '201803': '小白', '201801': '小明'}
>>> t = {}
>>> t['201804'] = '小新'
>>> print(t)
{'201804': '小新'}

2、字典的操作函数

操作函数描述
len(d)字典d的元素个数(长度)
min(d)字典d中的最小值
max(d)字典d中的最大值
dict()生成一个空字典
>>> d = {"201801": '小明',"201802": '小红',"201803": '小白'}
>>> len(d)
3
>>> min(d)
'201801'
>>> max(d)
'201803'
>>> d = dict()
>>> print(d)
{}

3、字典的操作方法

操作方法描述
d.keys()返回所有的键信息
d.values()返回所有的值信息
d.items()返回所有的键值对
d.get(key, default)键存在则返回相应值,否则返回默认值default
d.pop(key, default)键存在则返回相应值,同时删除键值对,否则返回默认值default
d.popitem()随机从字典中取出一个键值对,以元组(key, value)形式返回,同时将该键值对从字典中删除
d.clear()删除所有的键值对,清空字典

d.keys()

>>> d = {"201801": '小明',"201802": '小红',"201803": '小白'}
>>> d.keys()
dict_keys(['201802', '201803', '201801'])
>>> type(d.keys())
<class 'dict_keys'>
>>> list(d.keys())
['201802', '201803', '201801']

d.values()

>>> d = {"201801": '小明',"201802": '小红',"201803": '小白'}
>>> d.values()
dict_values(['小红', '小白', '小明'])
>>> type(d.values())
<class 'dict_values'>
>>> list(d.values())
['小红', '小白', '小明']

d.items()

>>> d = {"201801": '小明',"201802": '小红',"201803": '小白'}
>>> d.items()
dict_items([('201802', '小红'), ('201803', '小白'), ('201801', '小明')])
>>> type(d.items())
<class 'dict_items'>
>>> list(d.items())
[('201802', '小红'), ('201803', '小白'), ('201801', '小明')]

d.get(key, default)

>>> d = {"201801": '小明',"201802": '小红',"201803": '小白'}
>>> d.get('201802')
'小红'
>>> d.get('201804')
>>> d.get('201804', '不存在')
'不存在'

d.pop(key, default)

>>> d = {"201801": '小明',"201802": '小红',"201803": '小白'}
>>> d.pop('201802')
'小红'
>>> print(d)
{'201803': '小白', '201801': '小明'}
>>> d.pop('201804', '不存在')
'不存在'

d.popitem()

>>> d = {"201801": '小明',"201802": '小红',"201803": '小白'}
>>> print(d.popitem())
('201802', '小红')
>>> d
{'201803': '小白', '201801': '小明'}

d.clear

>>> d = {"201801": '小明',"201802": '小红',"201803": '小白'}
>>> d.clear()
>>> print(d)
{}

删除字典中某一元素。

>>> d = {"201801": '小明',"201802": '小红',"201803": '小白'}
>>> del d['201801']
>>> print(d)
{'201802': '小红', '201803': '小白'}

保留字in,用来判断一个键是否在字典中。如果在,返回True,否则返回False。

>>> d = {"201801": '小明',"201802": '小红',"201803": '小白'}
>>> '201801' in d
True
>>> '201804' in d
False
>>> d = {"201801": '小明',"201802": '小红',"201803": '小白'}
>>> for k in d:
	print("字典的键和值分别是:{}和{}".format(k, d.get(k)))

	
字典的键和值分别是:201802和小红
字典的键和值分别是:201803和小白
字典的键和值分别是:201801和小明

4、创建字典时,如果相同键对应不同值,字典采用最后(最新)一个"键值对"

d = {}
d['2014305166'] = '小佘'
d['2014305167'] = '小管'
print(d)
d['2014305167'] = '小岳'
print(d)

5、字典统计词频
步骤:
1 使用str.split()将字符串转换成列表
2 建立一个空字典{}
3 利用循环语句将列表写入字典
4 利用list(d.items())将字典转化成列表
5 根据数量从大到小(从小到大)进行排序
基本编程代码:

t = str.split()
d = {}
for i in t:
    d[i] = d.get(i, 0) + 1
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 按照数量排序

二、字典类型应用实例

1、人名最多数统计
给出了一个字符串,其中包含了含有重复的人名,请直接输出出现最多的人名。

s = '''双儿 洪七公 赵敏 赵敏 逍遥子 鳌拜 殷天正 金轮法王 乔峰 杨过 洪七公 郭靖 
       杨逍 鳌拜 殷天正 段誉 杨逍 慕容复 阿紫 慕容复 郭芙 乔峰 令狐冲 郭芙 
       金轮法王 小龙女 杨过 慕容复 梅超风 李莫愁 洪七公 张无忌 梅超风 杨逍 
       鳌拜 岳不群 黄药师 黄蓉 段誉 金轮法王 忽必烈 忽必烈 张三丰 乔峰 乔峰 
       阿紫 乔峰 金轮法王 袁冠南 张无忌 郭襄 黄蓉 李莫愁 赵敏 赵敏 郭芙 张三丰 
       乔峰 赵敏 梅超风 双儿 鳌拜 陈家洛 袁冠南 郭芙 郭芙 杨逍 赵敏 金轮法王 
       忽必烈 慕容复 张三丰 赵敏 杨逍 令狐冲 黄药师 袁冠南 杨逍 完颜洪烈 殷天正 
       李莫愁 阿紫 逍遥子 乔峰 逍遥子 完颜洪烈 郭芙 杨逍 张无忌 杨过 慕容复 
       逍遥子 虚竹 双儿 乔峰 郭芙 黄蓉 李莫愁 陈家洛 杨过 忽必烈 鳌拜 王语嫣 
       洪七公 韦小宝 阿朱 梅超风 段誉 岳灵珊 完颜洪烈 乔峰 段誉 杨过 杨过 慕容复 
       黄蓉 杨过 阿紫 杨逍 张三丰 张三丰 赵敏 张三丰 杨逍 黄蓉 金轮法王 郭襄 
       张三丰 令狐冲 赵敏 郭芙 韦小宝 黄药师 阿紫 韦小宝 金轮法王 杨逍 令狐冲 阿紫 
       洪七公 袁冠南 双儿 郭靖 鳌拜 谢逊 阿紫 郭襄 梅超风 张无忌 段誉 忽必烈 
       完颜洪烈 双儿 逍遥子 谢逊 完颜洪烈 殷天正 金轮法王 张三丰 双儿 郭襄 阿朱 
       郭襄 双儿 李莫愁 郭襄 忽必烈 金轮法王 张无忌 鳌拜 忽必烈 郭襄 令狐冲 
       谢逊 梅超风 殷天正 段誉 袁冠南 张三丰 王语嫣 阿紫 谢逊 杨过 郭靖 黄蓉 
       双儿 灭绝师太 段誉 张无忌 陈家洛 黄蓉 鳌拜 黄药师 逍遥子 忽必烈 赵敏 
       逍遥子 完颜洪烈 金轮法王 双儿 鳌拜 洪七公 郭芙 郭襄 赵敏'''
ls = s.split()
d = {}
for i in ls:
    d[i] = d.get(i, 0) + 1
max_name, max_cnt = "", 0
for k in d:
    if d[k] > max_cnt:
        max_name, max_cnt = k, d[k]
print(max_name)

2、键盘输入某班级同学就业的行业名称,行业名称之间用空格间隔(回车结束输入)。统计各行业就业人数按数量从高到低输出。如:

============= RESTART: C:\Users\jiajia\Desktop\Python\example.py =============
请输入各个同学行业名称,行业名称之间用空格间隔(回车结束输入):交通 金融 计算机 交通 计算机 计算机
计算机:3
交通:2
金融:1

法1:

names=input("请输入各个同学行业名称,行业名称之间用空格间隔(回车结束输入):")
t=names.split()
d = {}
for c in range(len(t)):
    d[t[c]]=d.get(t[c],0)+1
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 按照数量排序
for k in range(len(ls)):
    zy,num=ls[k]
    print("{}:{}".format(zy,num))

法2:

names=input("请输入各个同学行业名称,行业名称之间用空格间隔(回车结束输入):")
t = names.split()
d = {}
for i in t:
    d[i] = d.get(i, 0) + 1
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 按照数量排序
for k in ls:
    zy, num = k
    print("{}:{}".format(zy, num))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值