1、字典综述
数据类型划分:可变数据类型 不可变数据类型
可变数据类型(不可哈希):list dict set
不可变数据类型(可哈希):元祖 bool int str
dict key 必须是不可变数据类型,可哈希
value 任意数据类型
dict 优点:二分法查询
存储大量的关系型数据
缺点:无序的(3.5及以前的版本)
2、字典的操作
1)增
直接操作:没有键值对时则添加 有键值对时覆盖原数据
setdefault('name','Shark'):没有键值对时则添加 有键值对时不操作
dic1 = {'age': 18, 'name': 'jin', 'sex': 'male',} # 增: dic1['high'] = 185 #没有键值对,添加 dic1['age'] = 16 #如果有键,则值覆盖 dic1.setdefault('weight') # 有键值对,不做任何改变,没有才添加。 dic1.setdefault('weight',150) dic1.setdefault('name','二哥') print(dic1)
2)删
pop() 有返回值,可按返回的键值删除字典数据
pop('Shark',None) 没有键值对时,后面的数据不写会报错
popitem() 有返回值,返回元祖,随机删除键值对
clear() 清空字典
del dic1['name'] 删除单条数据,没有此键时会报错
del dic1 删除字典
dic1 = {'age': 18, 'name': 'jin', 'sex': 'male',} # 删 print(dic1.pop('age')) # 有返回值,按键去删除 print(dic1.pop('二哥',None)) # 可设置返回值 print(dic1) print(dic1.popitem()) # 随机删除 有返回值 元组里面是删除的键值。 # print(dic1) del dic1['name1'] print(dic1) del dic1 print(dic1) dic1.clear() #清空字典
3)改
直接改
update()
dic1 = {'age': 18, 'name': 'jin', 'sex': 'male',} # 改 update dic1['age'] = 16 dic = {"name":"jin","age":18,"sex":"male"} dic2 = {"name":"alex","weight":75} dic2.update(dic) # dic2更新,有的数据覆盖,没有的添加 print(dic) print(dic2)
4)查
直接查:没有此键会报错
dic1.get()
dic1.key() 打印键值
dic1.values() 打印数值
dic1.items() 打印键值对(元祖)
dic1 = {'age': 18, 'name': 'jin', 'sex': 'male',} # 查 print(dic1.keys(),type(dic1.keys())) print(dic1.values()) print(dic1.items()) for k,v in dic1.items(): print(k,v) v1 = dic1['name'] print(v1) v2 = dic1['name1'] # 报错 print(v2) print(dic1.get('name1','没有这个键'))
3、面试题
用一行代码实现数据的交换
# 用一行代码实现数据的交换 a,b = 1,2 print(a,b) a,b = b,a print(a,b)
4、相关练习
tu = ( 'alex', [ 11, 22, { 'k1':'v1', 'k2':[ 'age', 'name' ], 'k3':(11,22,33) }, 44 ] ) # a)讲述元祖的特性 # 元组被称为只读列表,即数据可以被查询,但不能被修改,所以,字符串的切片操作同样适用于元组。 # Python 的元组与列表类似,不同之处在于元组的元素不能修改。 # 元组使用小括号,列表使用方括号。 # 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。 # b)请问tu变量中的第一个元素'alex'是否可被修改? # 不可以 # c)请在元祖tu中添加一个元素'Seven' li = tu[1][2]['k2'] li.append('Seven') tu[1][2]['k2'] = li print(tu[1][2]['k2'])
dic = { 'k1':'v1', 'k2':'v2', 'k3':[11,22,33] } # a)请循环输出所有的key for k in dic: print(k) # b)请循环输出所有的value for k in dic: print(dic[k]) # c)请循环输出所有的 key 和 value for k in dic: print(k,dic[k]) # d)请在字典中添加一个键值对,'k4':'v4',输出添加后的字典 dic.setdefault('k4','v4') print(dic) # e)请在修改字典中'k1'对应的值为'alex',输出修改后的字典 dic['k1'] = 'alex' print(dic) # f)请在k3对应的值中追加一个元素44,输出修改后的字典 li = dic['k3'] li.append(44) dic['k3'] = li print(dic) # f)请在k3对应的值的第1个位置插入元素18,输出修改后的字典 lis = dic['k3'] lis.insert(0,18) dic['k3'] = lis print(dic)
li = [11,22,33,44,55,66,77,88,99,90] # 将所有大于66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中 dic = { } more = [] less = [] for i in li: if i >= 66: more.append(i) else: less.append(i) dic.setdefault('k1',more) dic.setdefault('k2',less) print(dic)
# 输出商品列表,用户输入序号,显示用户选中的商品 # 商品 li = ["手机", "电脑", '鼠标垫', '游艇'] # 要求:1:页面显示 序号 + 商品名称,如: # 1 手机 # 2 电脑 # … # 2: 用户输入选择的商品序号,然后打印商品名称 # 3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。 # 4:用户输入Q或者q,退出程序。 li = ['手机','电脑','鼠标垫','游艇'] dic = {} for i in range(len(li)): dic.setdefault(i+1,li[i]) for k in dic: print(k,dic[k]) for n in dic: num = input('请输入您的选择:').strip() if num.isalpha(): if num.upper() == 'Q': break elif num.isdigit(): if int(num) == n: print(dic[n]) break else: print('您的商品只有火星才有,本宝宝委屈。。。') continue