字典
定义:
1、字典是一种可变的容器,可以存储任何类型的数据
2、字典中的每个数据都是用‘键key’进行索引的,而不像序列(str list tuple)可以用整数进行索引
3、字典的存储是无序的
4、字典中的数据是以键key - 值 value 对(key_value对)形式形式存储
5、字典的键不能重复,且只能用不可变类型做字典的键
二、创建字典的字面值方式
字典表示方式,用{}括起来,以冒号(:)分割键值对,各个键值对之间用逗号分开
1、创建空字典
d={}
2、创建字典的构造函数
dict{} #生成一个空的字典,等同于 {}
dict(iterable) #通过可迭代对象穿件一个字典
dict(**kwargs) #关键字传参的形式生成一个字典
注意:字典的键必须为不可变类型的值
可变的类型有 list()列表 dict()字典 set()集合
三、字典的基本操作
1、字典的索引
语法:字典[键]
作用:用来获取字典所对应的值
2、字典的赋值
语法:
字典[键] = 值
说明:键不存在时就创建并赋值、键存在则修改
3、字典的删除
del语句语法:
del dict['键']
4、键判断键值或者键是否在字典中
in 和 not in 运算符
可以用in判断一个键是否存在于字典中,如果存在返回True ,不存在就返回False。not in 相反
语法 :‘键’ in dict 或者 ‘键’ not in dict
练习:写程序,实现以下功能:
1、将如下数据形成一个字典d
键 1 2 3 4
值 春季 有123月 夏季有456月 秋季有789月 冬季有 101112月
2让用户输入一个整数代表这个季节,打印这个季节对应信息,如果用户输入的信息不存在字典内,则提示用户‘信息不存在’ d={}d['1'] = '春季有1,2,3月'
d['2'] = '夏季有4,5,6月' d['3'] = '秋季有7,8,9月' d['4'] = '冬季有10,11,12月' print(d) intnum = int(input('请输入一个整数')) if intnum == 1: print(d['1']) elif intnum == 2: print(d['2']) elif intnum == 3: print(d['3']) elif intnum == 4: print(d['4']) else: print('信息不存在')
'''
seasons = {
1:'春季有123月',
2:'夏季有456月',
3:'秋季',
4:'冬季',
}
'''
d={} d['1'] = '春季有1,2,3月' d['2'] = '夏季有4,5,6月' d['3'] = '秋季有7,8,9月' d['4'] = '冬季有10,11,12月' print(d) intnum = input('请输入一个整数') if intnum.isdigit(): #判断是否是整数机制 i=int(intnum) if i == 1: print(d['1']) elif i == 2: print(d['2']) elif i == 3: print(d['3']) elif i == 4: print(d['4']) else: print('信息不存在') else: print('您输入的信息不符合规范')
#其实这个判断机制更巴适
if intnum in d: print(d[intnum]) else: print('信息不存在')
intnum = input('请输入一个整数') if intnum.isdigit(): #判断这个输入的字符串里面的东西是不是数字 i=int(intnum) #转换为int型 if i in d: #判断i是否在里面 print(d[i]) else: print('信息不存在') else: print('您输入的不是数字') #最终,这个程序是不成功的,因为key 键,‘1’或者‘2’,它是字符串‘1’ 不是int‘1’ 当我们将i转化为int的时候
# 然后int 型的i 在key(key是字符串)中判断是否存在,当然是不存在。int 型的 1 和str型的 1 无法匹配比较
四、字典的迭代对象
字典是可迭代对象,只能对键进行访问
for key ,value in dict.items(d):
print(key,value)
五、练习:输入一个字符串,打印这个字符串中出现过的字符和出现过的次数
如:输入abcabcabca
打印如下:
a:2次
b:3次
c :6次
注,不要求打印顺序
Str1 = input('输入一些字符串') Dict1 = {} for key in Str1: if key in Dict1: Dict1[key] = Dict1[key] + 1 else: Dict1[key] = 1 for keykey,value in dict.items(Dict1): print(keykey,':',value,'次') print(Dict1)
#运行结果
输入一些字符串abaababcccgggggg6672636777
a : 4 次
b : 3 次
c : 3 次
g : 6 次
6 : 4 次
7 : 4 次
2 : 1 次
3 : 1 次
{'a': 4, 'b': 3, 'c': 3, 'g': 6, '6': 4, '7': 4, '2': 1, '3': 1}
六、可以用于字典的函数
len(x) max(x) min(x) sun(x) any(x)
七、字典的内置方法
1、dict.clear()
删除字典中所有元素
这个方法没有参数,没有返回值
2、dict.from(seq[,vslue])
创建一个新的字典,以序列seq(seqs是一个tuple) 比如 seq = ('张三','李五','王二')中元素作为字典的键,value作为所有键对应的初始值
参数: seq --字典键值列表
value -- 可选参数,序列seq的值
返回值:
返回一个新的列表
3、dict.get(key,default = None)
返回指定键的值,如果指定键不在,则返回默认值。
4、dict.items()
以列表返回可遍历的(键, 值) 元组数组
5、dict.keys()
返回一个迭代器,可以使用 list() 来转换为列表。(以列表返回字典所有键)没有参数,返回一个字典所有键
把字典dict2的键/值对更新到dict里(相当于把dict2中的数据追加到dict1中)
参数:dict2
没有返回值
7、dict.values()
没有参数
以列表返回字典中所有值
8、pop(key.[,default])
删除字典给定键所对应的值,返回值为被删除的值。key值必须给出。否则,返回default值
参数:
key:要删除的键值
default:如果没有key,返回default值
返回值:
返回被删除的值
9、popitem()
随机返回并删除字典中的一对键和值
没有参数
返回值
返回一个键值对(key,value)形式
八、字典和列表比较
1、都是可变的容器
2、索引方式不同,列表用整数索引,字典用键索引
3、列表的储存是有序的,字典的储存是无序的
4、字典插入删除修改速度快于列表(重点)
练习:
任意输入很多学生的姓名,成绩,年龄。每个学生信息存入字典中,然后再放入列表内
每个学生信息需要手动输入:
设计到深复制和浅复制的问题:看这儿
如:
请输入姓名:tehs
请输入年龄:15
请输入成绩:99
请输入姓名:tffs
请输入年龄:asaa
请输入成绩:1000
请输入姓名:<回车> #结束输入
内部存储格式如下:
infors = [{'name':'tehs','age':18,'score':99},{'name':'china','age':66,'score':98 }
1、打印以上列表:
2、按一下下表格打印学生信息
+-----------+---------+--------+
姓名 年龄 成绩
Student = {} infors = [] List = [] num = 0 while num <= 1: student_name = input('请输入学生姓名:') Student['name'] = student_name student_age = input('请输入学生年龄') Student['age'] = student_age student_score = input('请输入学生成绩') Student['score'] = student_score infors.append(Student.copy()) #使用一哈浅拷贝 如果不用copy,两个infors两个元素都会被覆盖成一个元素 num += 1 print('循环退出') print('+------ +---------+---------+') print('| 姓名 | 年龄 | 成绩 | ') print('+--------+---------+---------+') for value1 in infors[0].values(): print('| ',value1,' ',end = '') print('| +--------+---------+---------+') for value2 in infors[1].values(): print('| ',value2,' ',end = '') print('| +--------+---------+---------+')
运行结果:
请输入学生姓名:小强 请输入学生年龄44 请输入学生成绩100 请输入学生姓名:王小 请输入学生年龄66 请输入学生成绩106 循环退出 +------ +---------+---------+ | 姓名 | 年龄 | 成绩 | +--------+---------+---------+ | 小强 | 44 | 100 | +--------+---------+---------+ | 王小 | 66 | 106 | +--------+---------+---------+ Process finished with exit code 0
打印名片管理系统:
要求:1、添加一个名片
2、删除一个名片
3、修改一个名片
4、查询一个名片
5、显示所有名片
6、退出系统
提示:card_infors = [{'name':'xx','qq':'xxx','wexin':'xxx',addr:'xxx'},
{'name':'xx','qq':'xxx','wexin':'xxx',addr:'xxx'},
{'name':'xx','qq':'xxx','wexin':'xxx',addr:'xxx'},
....
]
print("welcome Card System") Card_infors=[] #用列表来存储名片 print('1、添加新名片,2、删除一个名片,3、修改一个名片,4、查询一个名片,5、显示所有名片,6退出') while True: Card = {} FunctionChoose = input("选择操作序号: ") #获取用户输入,根据数据执行相应功能 if FunctionChoose == '6': break print("退出系统") elif FunctionChoose == '1': Card["name"] = input("输入添加卡片名:") Card["qq"] = input("输入QQ号:") Card["weixin"] = input("输入微信号:") Card["addr"] = input("输入地址:") Card_infors.append(Card) print('添加成功!') elif FunctionChoose == '2': print(Card_infors,"这是所有的名片,请输入被删除名片的名字") name = input() find_flag = 0 for temp in Card_infors: if temp['name'] == name: print() del Card_infors[Card_infors.index(temp)] find_flag = 1 print("删除成功!") break if find_flag == 0: print("删无此人") elif FunctionChoose == '3': print('选择你要修改的那个人名片的名字') xgname = input() find_flag = 0 for temp in Card_infors: if temp['name'] == xgname: Card["name"] = input("输入修改的卡片名:") Card["qq"] = input("输入修改的QQ号:") Card["weixin"] = input("输入修改的微信号:") Card["addr"] = input("输入修改的地址:") Card_infors[Card_infors.index(temp)]=Card print("修改成功!") find_flag = 1 if find_flag == 0: print("修无此人") elif FunctionChoose == '4': name = input("输入你要查询的人的名字") find_flag = 0 print("姓名 qq 微信 地址") for temp in Card_infors: if temp["name"] == name: print(temp['name'],' ',temp['qq'],' ',temp['weixin'],' ',temp['addr']) find_flag =1 if find_flag == 0: print("查无此人") elif FunctionChoose == '5': print('所有的信息',Card_infors) else: pass