一、字典的定义
字典是另一种可变数据类型,可存储任意类型对象。
无序的序列,键值对的输入顺序和在内存中的存储顺序不一致
字典中的数据存储以键值对的方式
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中
定义一个空的字典:
s = {}
print(s,type(s)) 输出字典的类型
{} <class 'dict'> 表示为一个新的字典
创建一个新的字典
>>> a = {'westos':'xian','name':'redhat','age':'11'}
>>> a
{'age': '11', 'westos': 'xian', 'name': 'redhat'}
使用工厂函数创建字典
>>> d = dict(name='koko',age='18',addr='xian')
>>> d
{'age': '18', 'addr': 'xian', 'name': 'koko'}
字典的嵌套
student = {
'10010':{
'name':'baba',
'age':20,
'score':100
},
'1100':{
'name':'tuantuan',
'age':22,
'score':222
}
}
print(student['10010']['name'])
效果展示
baba
二、字典的特性
1 通过键输出对应的值
d = {
'a':'1',
'b':'2'
}
print(d['a'])
2、成员操作符
判断指定的键是否时该字典中的键
in # 是该字典中的key则返回True,不是则返回False
not in #不是该字典中的key则返回True,是则返回False
d = {
'a':'1',
'b':'2'
}
print('a' in d)
print('a' not in d)
效果展示
True
False
3、for循环针对key
在使用for循环遍历字典的时候,遍历的是字典中的key。
d = {
'a':'1',
'b':'2'
}
for key in d:
print(key)
效果展示
a
b 输出所有的key值
遍历字典,输出字典的key 以及其对应的值
d = {
'a':'1',
'b':'2'
}
for key in d:
print(key,d[key])
效果展示
a 1
b 2 输出所有的健值对
三、字典元素的增加
格式 :dict[key] = value
如果key值存在,则更新对应的value值
如果key值不存在,则添加对应的key-value值
>>> a = {'https':'443','ssh':'22','dns':'53','http':'80'}
>>> a['ssh']=8080 因为原本的key值是已经存在了,所以是更新了value值
>>> a
{'dns': '53', 'http': '80', 'ssh': 8080, 'https': '443'}
>>> a['ftp']=23 原本的key值是不存在的,添加对应的key-value值
>>> a
{'ftp': 23, 'dns': '53', 'http': '80', 'ssh': 8080, 'https': '443'}
2 增加多个key值
dict1.update(dict2) # 将字典 dict2的所有元素添加到字典dict1中
>>> a = {'https':'443','ssh':'22','dns':'53','http':'80'} 原本字典中的元素
>>> b = {'gangben':'001','score':'99'} 定义一个新的字典
>>> a.update(b) 将新的字典全部加入到a字典中
>>> a
{'https': '443', 'http': '80', 'ssh': '22', 'dns': '53', 'score': '99', 'gangben': '001'} 输出全部的字典
>>>
3 dict,setdefault(key,value)
如果key值存在:不做修改
如果key值不存在:则添加对应的key-value
service = {
'http':'80',
'ftp':'22',
'ssh':'33'
}
service.setdefault('http',9090)
print(service)
效果展示
{'http': '80', 'ftp': '22', 'ssh': '33'} value值未改变
四、字典元素的删除
pop删除指定key对应的value值,如果key存在,删除,并且返回删除key对应的value(可以用变量取接收),如果不存在,直接报错
>>> a = {'http':80 ,'ftp':21,'ssh':22, 'dns':99 }
>>> a
{'ftp': 21, 'http': 80, 'ssh': 22, 'dns': 99}
>>> a.pop() 如果是直接删除的话,没有指定key值或者key值不存在的话都是会出现报错的
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pop expected at least 1 arguments, got 0
>>> a.pop('dns') 删除指定的key值,value值也会被删除
99
>>> a
{'ftp': 21, 'http': 80, 'ssh': 22}
>>> b = a.pop('ssh') 接受被删除的key值
>>> a
{'ftp': 21, 'http': 80}
>>> b 查看是已经接受的了
22
2 dict.popitem() 随机返回并删除字典中的一对键和值(一般删除末尾对)
a = {'http':80 ,'ftp':21,'ssh':22, 'dns':99 }
c = a.popitem()
print(c)
[root@localhost ~]# python ds.py
('ftp', 21) 显示被删除的键值对
3.清空字典
>>> a = {'http':80 ,'ftp':21,'ssh':22, 'dns':99 }
>>> a
{'ftp': 21, 'http': 80, 'ssh': 22, 'dns': 99}
>>> a.clear()
>>> a
{} a的内容全部被删除
五、字典元素的查看
1、查看字典的key值,生成一个字典,然后查看key值
dict.keys() # 生成一个列表,列表中的元素为字典中的key
>>> a
{'ftp': 21, 'http': 80, 'ssh': 22, 'dns': 99}
> a.keys() 字典里边所有的key值
['ftp', 'http', 'ssh', 'dns']
2、查看字典的value值
dict.values() # 查看字典的value值,生成一个新的列表,元素为字典中的所有value
>>> a
{'ftp': 21, 'http': 80, 'ssh': 22, 'dns': 99}
>>> a.values() 字典里边的所有values值,
[21, 80, 22, 99]
3 查看字典的key-value值
dict.items() # 查看字典的键值对,生成一个新的列表,新列表的每一个元素都为一个元组,该元组中存放的是一个键值对。
>>> a
{'ftp': 21, 'http': 80, 'ssh': 22, 'dns': 99}
>>> a.items()
[('ftp', 21), ('http', 80), ('ssh', 22), ('dns', 99)]
4 查看key的value值
直接使用key查看其对应的值,但是当查看的key不属于该字典的时候出现报错
>>> a
{'ftp': 21, 'http': 80, 'ssh': 22, 'dns': 99}
>>> a['ftp']
21 当key值存在的时候,查看的话会返回value值
>>> a['firewalld'] 当key值不存在的时候,查看会出现报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'firewalld'
使用get()查看key的value值,当key存在的时候,返回对应的value值,当key不存在的时候,返回一个设定好的默认值或者None。
>>> a
{'ftp': 21, 'http': 80, 'ssh': 22, 'dns': 99}
>>> a.get('ftp') key值存在的时候,查看是有value值返回的
21
>>> a.get('firewalld') 当key值不存在的时候,默认返回的是空
>>> a.get('firewalld',88) key值不存在的时候,设定一个默认的值返回
88
练习
数字重复统计:
1). 随机生成1000个整数;
2). 数字的范围[20, 100],
3). 升序输出所有不同的数字及其每个数字重复的次数;
import random
a_num=[]
for i in range(1000):
a_num.append(random.randint(20,100))
sorted_num = sorted(a_num)
dict_d = {}
for num in sorted_num:
if num in dict_d:
dict_d[num]+=1
else:
dict_d[num] = 1
print(dict_d)
重复的单词:
此处认为单词之间以空格为分隔符, 并且不包含,和.;
# 1. 用户输入一句英文句子;
# 2. 打印出每个单词及其重复的次数;
s = input('please input:')
d = s.split()
d_dict = {}
for i in d:
if i in d_dict:
d_dict[i] +=1
else:
d_dict[i] = 1
print(d_dict)
please input:hello world
{'hello': 1, 'world': 1}
- 随机生成100个卡号;
卡号以6102009开头, 后面3位依次是 (001, 002, 003, 100), - 生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";
- 输出卡号和密码信息, 格式如下:
卡号 密码
6102009001 000000
card = []
for i in range(100):
s = '6102009%.3d' %(i+1)
card.append(s)
cards_dict = {}.fromkeys(card,'001') #fromkeys的用法 用于创建并返回一个新的字典。两个参数:第一个是字典的键,第二个(可选)是传入键的值,默认为None。
print('cards\t\t\t\tpassword')
for key in cards_dict:
print('%s\t\t\t\t%s' %(key,cards_dict[key]))
cards password
6102009001 001
6102009002 001
6102009003 001
6102009004 001
...........实验效果太长不一一阐述