Python中的字典类似于Java中的Map,是以名值对的形式来保存数据的,是一种数据的映射方式
1、创建字典
dic = {"张三":"男", "李四":"女", "王五":"女博士"} #方式1
dic1 = dict((("LiLei", "Chinese"), ("HanMeimei", "England"))) #方式2
dic2 = dict(LiLei="Chinese", HanMeimei="England") #方式3
print(dic) #控制台输出
print(dic1)
print(dic2)
运行结果:
2、用key创建字典
dic3 = {}
dic4 = dic3.fromkeys(range(0, 5), "赞") #key的值是0-5,value的值是赞
print(dic4)
运行结果:
3、通过key来获取字典中的value
dic = {"张三":"男", "李四":"女", "王五":"女博士"}
key = "张三"
vale = dic[key] #获取字典中key为张三的value
print(vale)
运行结果:
4、修改/添加字典
向字典中添加键值对,系统会先在字典中寻找这个key,如果找到了就修改key的value,否则在字典中添加这个键值对
dic2 = dict(LiLei="Chinese", HanMeimei="England")
print(dic2) #输出未修改的字典
dic2["LiLei"] = "England" #修改原有字典项
dic2["Mike"] = "Cube" #添加字典项
print(dic2) #输出修改后的字典
运行结果:
5、通过get函数获取字典中的value
dic1 = dict((("LiLei", "Chinese"), ("HanMeimei", "England")))
value2 = dic1.get("HanMeimei") #通过get函数来获取字典的值,如果所找的项不存在则返回None
value3 = dic1.get("张三", "没有找到") #如果找不到key=张三的value,name就返回函数的第二参数值
print(value2)
print(value3)
运行结果:
6、判断字典中是否存在某个键值对
dic1 = dict((("LiLei", "Chinese"), ("HanMeimei", "England")))
result = "HanMeimei" in dic1 #如果dic1中有key=HanMeimei的key则返回true
result1 = "HanMeimei" not in dic1 #如果dic1中没有key=HanMeimei的key则返回true
print(result)
print(result1)
运行结果:
7、字典拷贝
拷贝字典并获得一个新的字典,新字典的键值对和被拷贝字典的键值对内容一致,但在内存中的地址指向不一致
a = {"one":1, "two":2, "three":3}
b = a.copy() #拷贝函数
print("字典a:%s" %a)
print("拷贝后的字典b:%s" %b)
aID = id(a) #获取id的函数
bID = id(b)
print("内存地址,字典a的ID:%s" %aID)
print("内存地址,字典b的ID:%s" %bID)
运行结果:
8、删除字典
dic1 = dict((("LiLei", "Chinese"), ("HanMeimei", "England")))
dic1.pop("LiLei") #删除字典项,即删除key=LiLei的
print(dic1)
dic1.clear() #清空字典项
print(dic1)
运行结果:
9、更新字典
将一个字典添加到另一个字典中
a = {"one":1, "two":2, "three":3}
b = {'a':'Dog', 'b':'Cat'}
a.update(b) #更新字典
print(a)
运行结果:
综合案例
需求说明
在图书馆每个用户都可以有借书的权利,图书馆中有4种书籍可以借阅,分别是Java、PHP、Python和Android;用户每次可以借阅多本书;输入借书用户的姓名,控制台输出该用户借阅的书籍,要求使用字典实现需求
需求分解
1、定义一个书架的字典,将Java、PHP、Python、Android放入书架字典中
2、定义一个所有用户借书的字典,只要有用户借书,就将用户和所借书籍信息存入字典(key=用户名,value=书籍数组)
实现
bookTemp = {"1":"Java", "2":"PHP", "3":"Python", "4":"Android"} #字典,可以外借的书
bookDic = {} #字典,所有用户借的书,key=姓名;value=书的数组
mainFlag = True #主程序的循环标志,mainFlag=Flase则表示程序结束
while mainFlag:
name = input("请输入姓名:\n")
bookFlag = True #借书的循环标志,bookFlag=False则表示借书完成
bookArr = [] #存放借书的数组
while bookFlag:
book = input("请输入要借阅的书籍:1=%s;2=%s;3=%s;4=%s;5=完成\n" %(bookTemp.get("1"), bookTemp.get("2"), bookTemp.get("3"), bookTemp.get("4")))
if book != "5": #未完成借书
bookArr.append(book) #将所借的书存放到数组
else: #完成借书
bookDic[name] = bookArr #将借书人和所借书籍存到所有用户借书的字典
bookFlag = False #借书本次借书
go = input("是否结束?y/n"+"\n")
if go == "y":
mainFlag = False #结束主程序
#输出借书的结果
name = input("请输入借书人姓名:\n")
bookArr = bookDic.get(name) #通过key找到借书的数组
if bookArr != None and len(bookArr) > 0: #非空校验
for item in bookArr: #循环获取所借数据的key
print(bookTemp.get(item)) #通过key获取数据的value
else:
print("未借图书")
运行结果: