1.字典的定义
#字典是一个无序的数据集合,使用print输出字典的时候
#通常输出的顺序和定义的顺序是不一致的
users = ['user1','user2']
passwd = ['123','456']
#
print(zip(users,passwd))
print(list(zip(users,passwd)))
print(dict(zip(users,passwd)))
s = {}
print(type(s))
#字典:key - value 键值对
#value可以是任意数据类型
s = {
'linux':[100,99,88],
'westos':[190,564,645]
}
#
print(s,type(s))
#工厂函数
d = dict()
print(type(d))
d1 = dict(a=1,b=2)
print(d1,type(d1))
#字典的嵌套
students = {
'03163068':{
'name':'zyc',
'age':21,
'score':80
},
'03163065':{
'name': 'zmm',
'age': 21,
'score': 75
}
}
print(students['03163068']['name'])
#所有的key和value值是一样的
print({}.fromkeys({'1','2'},'000000'))
2.字典的特性
d = {
‘1’:‘a’,
‘2’:‘b’
}
#字典不支持索引
print(d[0])
#字典不支持切片
print(d[:])
#字典的重复和连接无意义
#成员操作符(只可对key值进行操作)
print(‘1’ in d)
#for循环,默认遍历字典的key值
for i in d:
print(i)
#遍历字典
for i in d:
print(i,d[i])
3.字典的增加
services = {
‘http’:80,
‘ftp’:21,
‘ssh’:22
}
#增加一个元素
#如果key值存在,则更新对应的value值
#如果key值不存在,则添加对应key-value
services['mysql'] = 3306
print(services)
services['http'] = 443
print(services)
#添加多个key-value值
services_backup = {
'https':443,
'tomcat':8080,
'http':8080
}
services.update(services_backup)
print(services)
services.update(flask=9000,http=8000)
print(services)
#setdefault添加key值
#如果key值存在,不做修改
#如果key值不存在,添加对应的key-value
services.setdefault('http',9090)
print(services)
services.setdefault('oracle',44575)
print(services)
4.字典的删除
services = {
'http':80,
'ftp':21,
'ssh':22
}
##永久删除key-value
del services['http']
print(services)
#pop删除指定key的key-value
#如果key存在,删除,并返回删除key对应的value
#如果不存在,报错
services.pop('ftp')
item = services.pop('http')
print(item)
print(services)
#popitem删除最后一个key-value值
item = services.popitem()
print(item)
print(services)
#清空字典内容
services.clear()
print(services)
5.字典的查看
services = {
‘http’:80,
‘ftp’:21,
‘ssh’:22
}
#查看字典的key值
print(services.keys())
#查看字典的value值
print(services.values())
#查看字典的key-value值
print(services.items())
#查看key的value值
#key不存在,默认返回none
#key不存在,有default值,则返回default值
print(services.get('http'))
print(services.get('dns'))
print(services.get('https','key not exist'))
#遍历
for k,v in services.items():
print(k,'--->',v)
for k in services:
print(k,'--->',services[k])
6.练习
(1)
“”"
重复的单词: 此处认为单词之间以空格为分隔符, 并且不包含,和.>;
# 1. 用户输入一句英文句子;
# 2. 打印出每个单词及其重复的次数;
“hello java hello python”
hello 2
java 1
python 1
“”"
步骤:
1把每个单词分割处理
2通过字典存储该单词和其出现的次数
3依次循环遍历列表
如果列表元素不在字典的key中,将元素作为key 1作为value值
如果列表元素在字典的key中,直接更新元素的value值,在原有的基础上加1
s = input('请输入一个英文句子:')
new_s = s.split()
tz = {}
for i in new_s:
if i not in tz:
tz[i] = 1
else:
tz[i] += 1
print(tz)
(2)
“”"
数字重复统计:
1) 随机生成1000个整数
2) 数字范围[20,100]
3) 升序输出所有不同的数字及其每个数字的重复次数
“”"
import random
lb = []
for i in range(1000):
lb.append(random.randint(20,101))
new_lb = sorted(lb)
li = {}
for i in new_lb:
if i not in li:
li[i] = 1
else:
li[i] += 1
print(li)
(3)
“”"
1.随机生成100个卡号;
卡号以6102009开头, 后面3位依次是 (001, 002, 003, 100),
2生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";
3输出卡号和密码信息, 格式如下:
卡号 密码
6102009001 000000
“”"
li = []
for i in range(100):
s = '6102009%.3d' %(i+1)
li.append(s)
zd = {}.fromkeys(li,'redhat')
print('卡号'+' '+'密码')
for k,v in zd.items():
print(k,v)
(4)
“”"
模拟轮盘抽奖游戏
轮盘分为三部分: 一等奖, 二等奖和三等奖;
轮盘转的时候是随机的,
如果范围在[0,0.08)之间,代表一等奖,
如果范围在[0.08,0.3)之间,代表2等奖,
如果范围在[0, 1.0)之间,代表3等奖,
模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.
“”"
import random
lb = []
for i in range(1000):
lb.append(random.random())
zd = {
'一等奖':0,
'二等奖':0,
'三等奖':0
}
for i in lb:
if i<0.08:
zd['一等奖'] += 1
elif i>=0.08 and i<0.3:
zd['二等奖'] += 1
else :
zd['三等奖'] += 1
print(zd)
7.字典生成式
#需求1:假设有20个学生,学生名为westosX,学生成绩在60~100之间,筛选出成绩在90分以上的学生
(1)方法1
import random
stuInfo = {}
for i in range(20):
name = 'westos' + str(i)
score = random.randint(60,100)
stuInfo[name] = score
highscore = {}
for name,score in stuInfo.items():
if score > 90:
highscore[name] = score
print(highscore)
(2)方法2
print({name: score for name,score in stuInfo.items() if score > 90})
#需求2:将所有key值变为大写
d = dict(a=1,b=2)
print(d)
(1)方法1
new_d = {}
for i in d:
new_d[i.upper()] = d[i]
print(new_d)
(2)方法2
print({k.upper():v for k,v in d.items()})
#需求3:大小写、value值和并,统一以小写输出
d = dict(a=2,b=1,c=2,B=9,A=10)
(1)方法1
new_d = {}
for k,v in d.items():
low_k = k.lower()
if low_k not in new_d:
new_d[low_k] = v
else:
new_d[low_k] += v
print(new_d)
(2)方法2
print({k.lower():d.get(k.lower(),0) + d.get(k.upper(),0) for k in d})