字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:
dic = {'太白':{'name': '太白','age': 25, 'sex': '男',},
'name_list': ['王双','韩蕾','何青松',],
}
key:value形式存储,
key:不可变(可哈希)的数据类型
value:任意数据类型,对象。
大量的数据,关系型数据。查询速度非常快
python3.5包含3.5之前,字典无序的。
python3.6以后,字典是有序的。
dic = {'name': '太白', 'age': 18, 'sex': '男', 'job': 'IT'}
增
第一种: 有此key就改,无此key就添加
dic['sex'] = '男' dic['name'] = 'alex'
setdefault 有此key则不做任何操作但是给我返回对应的值,无此key则添加.
dic.setdefault('sex') dic.setdefault('hobby','讲课') dic.setdefault('name','alex') print(dic.setdefault('name')) print(dic)
fromkeys()
dic1 = dict.fromkeys([1,2,3],'alex') print(dic1) #{1: 'alex', 2: 'alex', 3: 'alex'} # 面试题:创建字典的方式 #1, # dic = {'name':'alex'} #2 # dic = dict({'name':'alex'}) # print(dic) #3, fromkeys() # 陷阱: # dic1 = dict.fromkeys([1,2,3],[]) # print(dic1) # # dic1[1].append('alex') # print(dic1) # print(id(dic1[1])) # print(id(dic1[2])) # print(id(dic1[3])) 总结:通过fromkeys()的默认值如果是一个[]空列表的话,这个列表是共用的,对列表进行操作,会影响到其他键值对。。。 # dic = {'key1': 'value1','key2': 'value2', 'k3':'v3', 'name': 'alex'} # 将 dic的键中含有k元素的所有键值对删除。 # for key in dic: # if 'k' in key: # dic.pop(key) # dictionary changed size during iteration: 在循环一个字典时,不能改变字典的大小。 # l1 = [] # for key in dic: # if 'k' in key: # l1.append(key) # # print(l1) # for key in l1: # dic.pop(key) # print(dic)
得知遍历时不能修改字典元素,解决办法:将遍历条件改为列表
for i in list(dic): #print(i) if 'k' in i: print(i) del dic[i] print(dic)
删
# pop 通过键去删除键值对,也有返回值,如果没有此键,并且设置了第二个参数,则不会报错,并且返回第二个参数。
print(dic.pop('name')) print(dic.pop('name1',None)) print(dic.pop('name1','没有此键....')) print(dic)
# clear 清空
dic.clear() print(dic)
# popitem :3.5 之前随即删除某个键值对,3.6以后,删除最后一组键值对。有返回值.
print(dic.popitem()) print(dic)
# del
# 按照键删除键值对
del dic['name']
# 删除整个字典
del dic print(dic)
改
# 第一种:
dic['age'] = 25 print(dic)
# 两个字典 update
dic = {"name":"jin","age":18,"sex":"male"}
dic2 = {"name":"alex","weight":75}
dic.update(dic2) # 将dic2中的所有键值对覆盖并添加到dic中,dic2 不变。
print(dic)
print(dic2)
dic.update(a='666',b='222',name='taibai') #也可以是键值对
print(dic)
查
# print(dic['name']) # print(dic['name1']) #按键查,没有的话会报错 # print(dic.get('name')) #以后建议都用get查, 没有键,也不会报错。 # print(dic.get('name1')) # print(dic.get('name1','没有此键。。。。'))
dic.keys(),以列表返回一个字典所有的键。
print(dic.keys(),type(dic.keys())) # 类似于列表的容器中
tinydict = {'Name': 'Zara', 'Age': 7}
print "Value : %s" % tinydict.keys()
#Value : ['Age', 'Name']
可以转化成list
l1 = list(dic.keys()) # 可以转化成list print(l1)
可以遍历
for key in dic.keys(): # 可以遍历 print(key)
dic.values(),以列表返回字典中的所有值 可转化成list,可遍历。
print(dic.values()) print(list(dic.values()))
dic.items() 可转化成list,可遍历。 print(dic.items())
tinydict = {'Name': 'Runoob', 'Age': 7}
print "Value : %s" % tinydict.values()
#Value : [7, 'Runoob']
dic.items(),以列表返回可遍历的(键, 值) 元组数组
tinydict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}
print("字典值 : %s" % tinydict.items())
# 遍历字典列表
for key, values in tinydict.items():
print(key, values)
字典值 : dict_items([('Google', 'www.google.com'), ('Runoob', 'www.runoob.com'), ('taobao', 'www.taobao.com')])
Google www.google.com
Runoob www.runoob.com
taobao www.taobao.com
分别赋值
a,b = 10,20 print(a,b) a,b = [10,20] print(a,b) a,b = [(1,2),(3,4)] print(a,b) a = 10 b = 20 a,b = b,a print(a,b)
for i in dic.items(): ''' i = ('name', '太白') i = ('age', 18) .... ''' print(i)
for k,v in dic.items(): ''' k,v = ('name', '太白') k,v = ('age', 18) .... ''' print(k,v) for i in dic: print(i) dict print(len(dic))
字典的嵌套
dic = {'name_list': ['王双', 'alex', '孙飞', 'taibai'],
1: {'name': 'taibai', 'age': 18, 'sex': '男'},
(1, 2): [100, {'ip': '192.168.1.1', 'port': 3306}]
}
1,给 name_list对应的列表追加一个值: 司徒大人.
print(dic['name_list']) dic['name_list'].append('司徒大人') print(dic)
2,将name_list对应的alex 变成全部大写.
dic['name_list'][1] = 'ALEX' dic['name_list'][1] = dic['name_list'][1].upper() print(dic)
3, 将1对应的字典添加一个键值对: weight : 75
print(dic[1]) dic[1]['weight'] = 75 print(dic)
4,将1 对应的字典的name键对应的名字taibai 换成alex
dic[1]['name'] = 'alex' print(dic)
5,将 {'ip': '192.168.1.1', 'port': 3306} 此字典的port键值对删除.
dic[(1,2)][1].pop('port') print(dic)
#作业及默写 # # 1,有如下变量(tu是个元祖),请实现要求的功能 # #tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44]) # a.讲述元祖的特性 # b.请问tu变量中的第一个元素 "alex" 是否可被修改? # c.请问tu变量中的 "k2" 对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven" # d.请问tu变量中的 "k3" 对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素"Seven" # 2, 字典dic, dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]} # dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]} # a.请循环输出所有的key # b.请循环输出所有的value # c.请循环输出所有的key和value # d.请在字典中添加一个键值对,"k4": "v4",输出添加后的字典 # e.请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典 # f.请在k3对应的值中追加一个元素44,输出修改后的字典 # g.请在k3对应的值的第 1 个位置插入个元素18,输出修改后的字典 # 3, av_catalog = { "欧美": { "www.111.com": ["很多免费的,世界最大的", "质量一般"], "www.2222.com": ["很多免费的,也很大", "质量比22222高点"], "333.com": ["多是自拍,高质量图片很多", "资源不多,更新慢"], "444.com": ["质量很高,真的很高", "全部收费,屌丝请绕过"] }, "日韩": { "tokyo-hot": ["质量怎样不清楚,个人已经不喜欢日韩范了", "verygood"] }, "大陆": { "1024": ["全部免费,真好,好人一生平安", "服务器在国外,慢"] } } # # a, 给此["很多免费的,世界最大的", "质量一般"]列表第二个位置插入一个元素:'量很大'。 # b, 将此["质量很高,真的很高", "全部收费,屌丝请绕过"] 列表的 "全部收费,屌丝请绕过" 删除。 # c, 将此["质量很高,真的很高", "全部收费,屌丝请绕过"] 列表的"全部收费,屌丝请绕过"删除。 # d, 将此["质量怎样不清楚,个人已经不喜欢日韩范了", "verygood"]列表的"verygood" 全部变成大写。 # e, 给'大陆'对应的字典添加一个键值对 '1048': ['一天就封了'] # f, 删除此 "333.com": ["多是自拍,高质量图片很多", "资源不多,更新慢"]键值对。 # g, 给此["全部免费,真好,好人一生平安", "服务器在国外,慢"]列表的第一个元素,加上一句话:'可以爬下来' # 4、有字符串"k:1|k1:2|k2:3|k3:4" 处理成字典 {'k': 1, 'k1': 2....} # 5、元素分类有如下值li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90],将所有大于 66的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。 # 即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表} # 6、输出商品列表,用户输入序号,显示用户选中的商品 # # 商品列表: goods = [{"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, ] # # 要求: # 1:页面显示 # 序号 + 商品名称 + 商品价格,如: # 1 电脑 1999 {'name': '电脑', 'price': 1999} # 2 鼠标 10 # 2:用户输入选择的商品序号,然后打印商品名称及商品价格 # 3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。 # 排除非字母的情况:isdigit() # 超出数字范围 # while # 4:用户输入Q或者q,退出程序。 break # # # 明日默写内容。 # # 1)字典的增删改查。 # 2)过滤敏感字符代码的默写。 # # li = ["苍老师", "东京热", "武藤兰", "波多野结衣"] # l1 = [] # comment = input('请输入评论>>>') # for i in li: # comment = comment.replace(i, '*' * len(i)) # l1.append(comment) # print(l1) #
#作业及默写 # # 1,有如下变量(tu是个元祖),请实现要求的功能 # #tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44]) # a.讲述元祖的特性 # 列表属于可边序列,可以任意修改列表中的元素,元组属于不可变序列,不能修改元组中的 # 元素,因此,元组没有增加元素,修改元素,删除元素相关的方法 # 因此,我们只需要学习元组的创建和删除,元组中元素的访问和技术即可,元组支持以下操作 # 1.索引访问 2.切片操作 3.连接操作 4.成员关系操作 5.比较运算操作 # 6.计数:元组长度len(),最大值max(),最小值(),求和sum() # b.请问tu变量中的第一个元素 "alex" 是否可被修改? #不可以 # c.请问tu变量中的 "k2" 对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven" # tu[1][2]['k2'].append('Seven') # print(tu) # d.请问tu变量中的 "k3" 对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素"Seven" #元祖,不可以。 # 2, 字典dic, dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]} # dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]} # a.请循环输出所有的key # for key in dic.keys(): # print(key) # b.请循环输出所有的value # for v in dic.values(): # print(v) # c.请循环输出所有的key和value # for k,v in dic.items(): # print(k,v) # d.请在字典中添加一个键值对,"k4": "v4",输出添加后的字典 # dic['k4']= 'v4' # print(dic) # e.请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典 # dic['k1'] = 'alex' # print(dic) # f.请在k3对应的值中追加一个元素44,输出修改后的字典 # dic['k3'].append(44) # print(dic) # g.请在k3对应的值的第 1 个位置插入个元素18,输出修改后的字典 # dic['k3'].insert(0,18) # print(dic) # 3, av_catalog = { "欧美": { "www.111.com": ["很多免费的,世界最大的", "质量一般"], "www.2222.com": ["很多免费的,也很大", "质量比22222高点"], "333.com": ["多是自拍,高质量图片很多", "资源不多,更新慢"], "444.com": ["质量很高,真的很高", "全部收费,屌丝请绕过"] }, "日韩": { "tokyo-hot": ["质量怎样不清楚,个人已经不喜欢日韩范了", "verygood"] }, "大陆": { "1024": ["全部免费,真好,好人一生平安", "服务器在国外,慢"] } } # # a, 给此["很多免费的,世界最大的", "质量一般"]列表第二个位置插入一个元素:'量很大'。 # av_catalog['欧美']["www.111.com"].insert(1,'量很大') # print(av_catalog) # b, 将此["质量很高,真的很高", "全部收费,屌丝请绕过"] 列表的 "全部收费,屌丝请绕过" 删除。 # av_catalog['欧美']["444.com"].pop(1) # print(av_catalog) # c, 将此["质量很高,真的很高", "全部收费,屌丝请绕过"] 列表的"全部收费,屌丝请绕过"删除。 # d, 将此["质量怎样不清楚,个人已经不喜欢日韩范了", "verygood"]列表的"verygood" 全部变成大写。 # av_catalog['日韩']['tokyo-hot'][1] = av_catalog['日韩']['tokyo-hot'][1].upper() #print(av_catalog) # e, 给'大陆'对应的字典添加一个键值对 '1048': ['一天就封了'] # av_catalog['大陆']['1048'] = ['一天就封了'] # print(av_catalog) # f, 删除此 "333.com": ["多是自拍,高质量图片很多", "资源不多,更新慢"]键值对。 # av_catalog['欧美'].pop("333.com") # print(av_catalog) # g, 给此["全部免费,真好,好人一生平安", "服务器在国外,慢"]列表的第一个元素,加上一句话:'可以爬下来' # av_catalog['大陆']['1024'][0] = "全部免费,真好,好人一生平安,可以爬下来" # av_catalog['大陆']['1024'][0] = av_catalog['大陆']['1024'][0] + '可以爬下来' # av_catalog['大陆']['1024'][0] += '可以爬下来' ''' count = count + 1 count += 1 ''' # 4、有字符串"k:1|k1:2|k2:3|k3:4" 处理成字典 {'k': 1, 'k1': 2....} #s1 = "k:1|k1:2|k2:3|k3:4" # s2 = s1.split('|') # print(s2) #['k:1', 'k1:2', 'k2:3', 'k3:4'] # for i in s2: # a,b =i.split(':') # dic[a]=int(b) # print(dic) # s2 = s1.split('|') # for i in s2: # lst = i.split(':') # dic[lst[0]] =int(lst[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 = {'k1':[],'k2':[]} # for i in li: # if i > 66: # dic['k1'].append(i) # else: # dic['k2'].append(i) # print(dic) # 6、输出商品列表,用户输入序号,显示用户选中的商品 # # 商品列表: goods = [{"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, ] # # 要求: # 1:页面显示 # 序号 + 商品名称 + 商品价格,如: # 1 电脑 1999 {'name': '电脑', 'price': 1999} # 2 鼠标 10 dic = {} for i in goods: #print(goods.index(i)+1,i['name'],i['price']) dic[goods.index(i)+1] = [i['name'],i['price']] #print(dic) # 2:用户输入选择的商品序号,然后打印商品名称及商品价格 # 3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。 # 排除非字母的情况:isdigit() # 超出数字范围 # while # 4:用户输入Q或者q,退出程序。 break # for input print() #print(len(dic)) while 1: msg = input('请输入商品序号').strip() if msg.upper() == 'Q':break if msg.isdigit(): msg = int(msg) if msg <= int(len(dic)): print(dic[msg]) else: print('输入数值超出范围') else: print('输入有误,并重新输入') # while 1: for i in goods: ''' enumrate() 枚举。。。。 ''' print(goods.index(i) + 1, i['name'], i['price']) choice_num = input('请输入>>>').strip() if choice_num.isdigit(): ''' if 范围,1 ~ 4 num = input ''' else: print('您输入的有非数字元素,请重新输入') # # # # # # # 明日默写内容。 # # 1)字典的增删改查。 # 2)过滤敏感字符代码的默写。 # # li = ["苍老师", "东京热", "武藤兰", "波多野结衣"] # l1 = [] # comment = input('请输入评论>>>') # for i in li: # comment = comment.replace(i, '*' * len(i)) # l1.append(comment) # print(l1) #
# 商品列表: # goods = [{"name": "电脑", "price": 1999}, # {"name": "鼠标", "price": 10}, # {"name": "游艇", "price": 20}, # {"name": "美女", "price": 998}, ] # # 要求: # 1:页面显示 序号 + 商品名称 + 商品价格,如: # 1 电脑 1999 # 2 鼠标 10 # … # 2:用户输入选择的商品序号,然后打印商品名称及商品价格 # 3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。 # 4:用户输入Q或者q,退出程序。 goods = [{"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, ] while 1: print('****商品具体展示:****') for index,i in enumerate(goods,1): print('{}\t{}\t{}'.format(index,i['name'],i['price'])) print('*********************') choice_num = input('输入商品序号:').strip() if choice_num.isdigit(): if 0 < int(choice_num) <= len(goods): print(goods[int(choice_num)-1]['name']) else: print('超出范围,重新选择...') else: print('请输入数字,请重新输入')
list3 = [ {"name": "alex", "hobby": "抽烟"}, {"name": "alex", "hobby": "喝酒"}, {"name": "alex", "hobby": "烫头"}, {"name": "alex", "hobby": "Massage"}, {"name": "wusir", "hobby": "喊麦"}, {"name": "wusir", "hobby": "街舞"}, {"name": "wusir", "hobby": "唱歌"}, {"name": "太白", "hobby": "开车"}, ] list4 = [ {"name": "alex", "hobby_list": ["抽烟", "喝酒", "烫头", "Massage"]}, {"name": "wusir", "hobby_list": ["喊麦", "街舞"]}, ] # 将list3 这种数据类型转化成list4类型,你写的代码必须支持可拓展, # 比如list3 数据在加一个这样的字典{"name": "wusir", "hobby": "溜达"}, 你的list4{"name": "wusir", "hobby_list": ["喊麦", "街舞", "溜达"], # 或者list3增加一个字典{"name": "太白", "hobby": "开车"}, # 你的list4{"name": "太白", "hobby_list": ["开车"],无论按照要求加多少数据,你的代码都可以转化.如果不支持拓展,则4分,支持拓展则8分. # {'alex':{"name": "alex", "hobby_list": ["抽烟", "喝酒", "烫头", "Massage"] # 'wusir':{"name": "wusir", "hobby_list": ["喊麦", "街舞"]} # } dic ={} for l in list3: print(l['name'],l['hobby']) if l['name'] in dic: dic[l['name']]['hobby_list'].append(l['hobby']) else: dic[l['name']] = {'name':l['name'],'hobby_list':[l['hobby']]} print(dic)
#{'alex': {'name': 'alex', 'hobby_list': ['抽烟', '喝酒', '烫头', 'Massage']}, 'wusir': {'name': 'wusir', 'hobby_list': ['喊麦', '街舞', '唱歌']}, '太白': {'name': '太白', 'hobby_list': ['开车']}} print(dic.values()) #dict_values([{'name': 'alex', 'hobby_list': ['抽烟', '喝酒', '烫头', 'Massage']}, {'name': 'wusir', 'hobby_list': ['喊麦', '街舞', '唱歌']}, {'name': '太白', 'hobby_list': ['开车']}]) print(list(dic.values())) [{'name': 'alex', 'hobby_list': ['抽烟', '喝酒', '烫头', 'Massage']}, {'name': 'wusir', 'hobby_list': ['喊麦', '街舞', '唱歌']}, {'name': '太白', 'hobby_list': ['开车']}]
最终结果
ps:部分内容来自于互联网整理,如有侵权请联系我们,我们会在看到通知后24小时内做出处理。
posted on
浙公网安备 33010602011771号