python数据类型之字典
字典:key :value 键值对存储的一种数据结构
value值可以是任意数据类型:int float long list tuple set dict
1. 字典的创建
d = {}
print(d,type(d))
输出结果:
{} <class 'dict'>
d = {
'张三':[18,'男','玩手机'],
'李四':[18,'女','修手机']
}
print(d)
print(d['李四'])
输出结果:
{'张三': [18, '男', '玩手机'], '李四': [18, '女', '修手机']}
[18, '女', '修手机']
d2 = {
'a':1,
'b':2
}
print(d2)
d3 = {
'a':{1,2,3},
'b':{2,3,4}
}
print(d3)
输出结果:
{'a': 1, 'b': 2}
{'a': {1, 2, 3}, 'b': {2, 3, 4}}
- 字典的嵌套
students = {
'06163012':{
'name':'猪猪女孩',
'age':18,
'score':90
},
'03162003':{
'name':'狗狗男孩',
'age':19,
'score':80
}
}
print(students['03162003']['name'])
输出结果:
狗狗男孩
- 工厂函数
d5 = dict(a=1,b=2)
print(d5)
输出结果:
{'a': 1, 'b': 2}
2. 字典的特性
- 字典的所有操作都是通过它的key
d = {
'1':'a',
'8':'b',
'2':'a'
}
print(d['1'])
#print(d['a']) #会报错
输出结果:
a
-
字典不支持索引
print(d[0])这个写法会报错,因为0不是这个字典的key,字典只能通过key查找value -
字典不支持切片
print(d[::-1])报错 -
字典的重复和连接是无意义的,因为字典的key是唯一的
-
成员操作符:判断的也是 某个值是否为字典的key
d = {
'1':'a',
'8':'b',
'2':'a'
}
print('1' in d)
print('1' not in d)
输出结果:
True
False
- 字典的for 循环: 默认遍历字典的key值
for key in d:
print(key)
输出结果:
1
8
2
for key in d:
print(key,d[key])
输出结果:
1 a
8 b
2 a
2. 字典的增加
1.增加一个元素
1).如果key值存在,则更新对应的value值
2).如果key值不存在,则添加对应的key-value值
services = {
'http': 80,
'ftp': 21,
'ssh': 22
}
services['mysql'] = 3306
print(services)
services['http'] = 443
print(services)
结果:
{'http': 80, 'ftp': 21, 'ssh': 22, 'mysql': 3306}
{'http': 443, 'ftp': 21, 'ssh': 22, 'mysql': 3306}
2.添加多个key-value值
1).如果key值存在,则更新对应的value值
2).如果key值不存在,则添加对应的key-value值
services = {
'http': 80,
'ftp': 21,
'ssh': 22
}
service_backup = {
'tomcat':8080,
'https':443,
'http':8888
}
services.update(service_backup)
print(services)
services.update(flask=9000,http=999)
print(services)
结果:
{'http': 8888, 'ftp': 21, 'ssh': 22, 'tomcat': 8080, 'https': 443}
{'http': 999, 'ftp': 21, 'ssh': 22, 'tomcat': 8080, 'https': 443, 'flask': 9000}
3.setdefault添加key值:
1).如果key值存在,则不做修改
2).如果key值不存在,则添加对应的key-value值
services = {
'http': 80,
'ftp': 21,
'ssh': 22
}
services.setdefault('http',9000)
print(services)
services.setdefault('oracle',44575)
print(services)
结果:
{'http': 80, 'ftp': 21, 'ssh': 22}
{'http': 80, 'ftp': 21, 'ssh': 22, 'oracle': 44575}
3. 字典的删除
1. del关键字
services = {
'http': 80,
'ftp': 21,
'ssh': 22,
'mysql':3306
}
del services['http']
print(services)
输出结果:
{'ftp': 21, 'ssh': 22, 'mysql': 3306}
2.pop删除指定的key的key-value值
1.)如果key存在,删除,并且返回删除key对应的value值
2.)如果key不存在,直接报错
services = {
'http': 80,
'ftp': 21,
'ssh': 22,
'mysql':3306
}
item = services.pop('http')
print(item)
print(services)
输出结果:
80
{'ftp': 21, 'ssh': 22, 'mysql': 3306}
3.popitem删除最后一个key-value
services = {
'http': 80,
'ftp': 21,
'ssh': 22,
'mysql':3306
}
item = services.popitem()
print('删除的key-value对应的是:',item)
print(services)
输出结果:
删除的key-value对应的是: ('mysql', 3306)
{'http': 80, 'ftp': 21, 'ssh': 22}
4.清空字典内容
services = {
'http': 80,
'ftp': 21,
'ssh': 22,
'mysql':3306
}
services.clear()
print(services)
输出结果:
{}
4. 字典的修改与查找
- 查看字典里面的key值
service = {
'http':80,
'mysql':3306
}
print(service.keys())
输出结果:
dict_keys(['http', 'mysql'])
- 查看字典里面的value值
service = {
'http':80,
'mysql':3306
}
print(service.values())
输出结果:
dict_values([80, 3306])
- 遍历字典
service = {
'http':80,
'mysql':3306
}
for k,v in service.items():
print(k,'---->',v)
for k in service:
print(k,'---->',service[k])
输出结果:
http ----> 80
mysql ----> 3306
http ----> 80
mysql ----> 3306
- 查看指定key对应的value值
key值不存在,程序会报错
service = {
'http':80,
'mysql':3306
}
print(service['http'])
#print(service['https']) 会报错
输出结果:
80
-
get 方法获取指定key对应的value值
如果key值存在,返回对应的value值
如果key值不存在,默认返回None,如果需要指定返回的值,传值即可
service = {
'http':80,
'mysql':3306
}
print(service.get('http'))
print(service.get('https','不存在'))
输出结果:
80
不存在
5. 字典的小练习
- 练习一
-
生成100个卡号;
卡号以6102009开头, 后面3位依次是 (001, 002, 003, 100), -
生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";
-
输出卡号和密码信息, 格式如下:
卡号 密码
6102009001 000000
"""
fromkeys第一个参数可以是 list/tuple/str/set
将第一个参数的元素作为字典的key值
并且所有key的value值一致,都为'00000000'
"""
# print({}.fromkeys({'1','2'},'0000000'))
#存储所有卡号列表,也可以通过集合来存储
card_ids = []
# 生成100个卡号
for i in range(100):
# %.3d代表这个整型数占3位 eg:1--->001
s = '6102009%.3d' %(i+1)
# 将每次生成的卡号都加入到列表中
card_ids.append(s)
card_ids_dict = {}.fromkeys(card_ids,'redhat')
# print(card_ids_dict)
print('卡号\t\t\t\t\t密码')
for key in card_ids_dict:
print('%s\t\t\t%s' %(key,card_ids_dict[key]))
-
练习一
重复的单词: 此处认为单词之间以空格为分隔符, 并且不包含,和 . ;- 用户输入一句英文句子;
- 打印出每个单词及其重复的次数;
str=input('输入英文句子:')
word_list=str.split(' ')
word_dict={}
for i in word_list:
times=1
if i in word_dict:
times+=1
word_dict[i]=times
for k,v in word_dict.items():
print(k,'---',v)
- 练习二
数字重复统计:
1). 随机生成1000个整数;
2). 数字的范围[20, 100],
3). 升序输出所有不同的数字及其每个数字重复的次数;