基本数据类型----dict
1,什么是字典dict
字典的简单介绍:
字典(dict)是python里面唯一的一个映射类型.他是以{}括键值对组成,在dict中key是唯一的,在保存的时候根据key来计算一个内存地址,然后key-value保存在这个地址中,这种算法被称为hash算法,所以切记字典中key必须是可hash的,如果你搞不明白可哈希,暂时可以这样记,可以改变的都是不可哈希的,那么哈希就意味着不可变的,这个是为了能准确的计算内存地址而规定的
已知可哈希的(不可变)的数据类型:int,str,tuple,bool
不可哈希(可变)的数据类型:list,dict,set
语法:{key :value1,key2:value2}
注意:key必须是哈希的,value没有要求,可以保持任意类型的数据
dic保存的数据不是按照我们添加进去的顺序保存的,是按照hash表的顺序保存的,而hash表不是连续的,所以不能进行切边工作,他只能通过key来获取dict中的数据
2,字典的增删改查和其他操作
1.增
dic = {} dic['name'] = '赵瑞鑫'#如果dict中没有出现key,就会新增加一个key-value的组合dict dic.setdefault('六六六') #也可以往里面设置值 dic.setdefaul('六六六',666) #如果dict已经存在,那么setdefaul将不会起到添加的作用
2.删
dic.pop(key)#输入key值删除相应的值 print(dic) del dic[key] #操作方法同上 print(dic) dic.popitem()#在2之前是随机删除,3默认删除最后一个 dic.clear() #清空字典中所有的内容
3.改
dic[key] = 新value dic.update(dic_1要更新的新列表) #把dic_1更新的到dic中,如果key重名,则修改替换,如果不存在key,则新增.
4.查
查询一般用key来查找具体的数据
1.print(dic['name']) #如果没有的话会报错的 2.dic,get('ok')#如果没又找到的话可以返回NONE值,或者你也可以在后面加个返回值 dic.get('ok','对不起没有找到哦~')
5.其他操作
dic = {'id':123,'name':'sylar',''age'':30,"like":"科比"} #不管它是什么,当list来用就行 for key in dic.keys(): print(key) 取到key值,要是取得value的话 print(dic[key]) 通过键值对拿到k和v for k,v in dic.item() : print(k) print(v)
3,字典的嵌套
用一个最最简单的购物车来表达
输出商品列表,用户输入序号,显示用户选中的商品
goods = [{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998}, ]
'''
要求:
1:页面显示 序号 + 商品名称 + 商品价格,如:
1 电脑 1999
2 鼠标 10
…
2:用户输入选择的商品序号,然后打印商品名称及商品价格
3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。
4:用户输入Q或者q,退出程序。
'''
shopping_car=[] for i in range(len(goods)): print("编号",i+1,":",goods[i]["name"],goods[i]["price"]) while 1: choice = input("请输入你想要购买的商品序号:") if choice.upper()=="Q": break else: if choice.isdigit(): if int(choice) > 0 and int(choice) < len(goods) + 1: print(goods[int(choice) - 1]["name"], goods[int(choice) - 1]["price"]) shopping_car.append(int(choice)) print("你已经购买了以下商品") for i in range(len(shopping_car)): print(goods[shopping_car[i] - 1]["name"], goods[shopping_car[i] - 1]["price"]) else: print('你输入的是非法字符') else: print('你输入的是非法字符,请重新输入')
五, 其他操作:
len() 计算键值对的个数
字典在迭代的时候不可以改变大小
把要删除的key保存在列表中. 循环列表. 删除字典
dict.fromkeys(key, value)
1. 返回给你新列表.
2. 所有的key公用同一个value
推导式: {key: value for循环 if}