字典
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据,查询速度快。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。
可哈希表示key必须是不可变类型,如:数字、字符串、元组。
字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
数据类型分类:
可变数据类型(不可哈希):list,dict,set。 不可变数据类型(可哈希):int,bool,str,tuple. 字典的键:不可变数据类型。 字典的值:任意数据类型。 容器类型: 容器类(承载各种数据类型):list,tuple,dict。. 字典的键是唯一的。 字典的顺序: 3.5之前,字典是无序的。 3.6开始,字典创建的时候,按照一定的顺序插入的数值,看起来是有序的。字典的方法
dic = { "name":"jin", "age":18, "sex":"male",}# 字典的增# 第一种:有则覆盖,无则增加dic['hobby'] = 'girl'print(dic)# 第二种:有则不变,无则增加dic.setdefault('hobby') # 无value时默认为Nonedic.setdefault('hobby', 'girl')# 字典的删 dic.pop(key, None) # 有返回值,为删除的value,无则报错dic.popitem() # 随机删除,有返回值dic.clear() # 清楚字典del dic[key] # 删除字典或按key删除# 字典的改dic['name'] = 'alex'print(dic)dic2 = { "name":"alex","weight":75}dic.updata(dic2) # 将dic2迭代添加并覆盖dic里已有的# 字典的查print(dic['name']) # 无则报错print(dic.get('name'))#无则返回None(可以自定义返回内容)
# 其他方法dic = { "name":"jin", "age":18, "sex":"male"}print(dic.keys())dict_keys(['name', 'age', 'sex'])print(dic.values())dict_values(['jin', 18, 'male'])dic.keys()和dic.vaues()可以for循环里面的元素for i in dic = for i in dic.keys()li = list(dic.keys()) # 变成列表print(dic.items())dict_items([('name', 'jin'), ('age', 18), ('sex', 'male')])for k, v in dic.items(): print(k, v)
概念:分别赋值
a = 4
b = 5 a, b = b, a print(a,b)字典的嵌套
dic = { "name_list":['张三','lisi','隔壁王叔叔'], 'dic2':{ 'name':'太白','age':12} } # 1 ,给列表追加一个元素:'旺旺'dic['name_list'].append('旺旺')print(dic)#,2,给列表lisi全部大写dic['name_list'][1] = dic['name_list'][1].upper()print(dic)#3,给dic2 对应的字典添加一个键值对:hobby:girldic['dic2']['hobby'] = 'girl'print(dic)
课后作业
# 4、有字符串"k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....}
s = 'k:1|k1:2|k2:3|k3:4'dic = {}s = s.split('|')for i in s: i = i.split(':') dic[i[0]] = i[1]print(dic)
5、元素分类
有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}
li= [11,22,33,44,55,66,77,88,99,90]dic = {}dic['k1'] = []dic['k2'] = []for i in li: if i >= 66: dic['k1'].append(i) else: dic['k2'].append(i)print(dic)
6、输出商品列表,用户输入序号,显示用户选中的商品
商品 li = ["手机", "电脑", '鼠标垫', '游艇']
要求:1:页面显示 序号 + 商品名称,如:
1 手机
2 电脑
…
2: 用户输入选择的商品序号,然后打印商品名称
3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。
4:用户输入Q或者q,退出程序。
li = ["手机", "电脑", '鼠标垫', '游艇']shopping_cart = []for i, name in enumerate(li, 1): print(i, name)while True: choice = input('请选择商品序号:').strip() if choice.upper() == 'Q': print('----------您已购买以下商品----------') for k in shopping_cart: print(k) break if choice.isdigit() and int(choice) <= len(li): choice = int(choice) shopping_cart.append(li[choice-1]) print(li[choice-1]) else: print('您输入有误,请重新输入!')