06基本数据类型---字典
可变、键值对、无序,哈希表
1、定义方式
dict1 = {'name':'cc','age':15,'job':'solider'}
dict2 = dict(name='cc',age=15,job='sloler')
dict3 = dict([['name','cc'],['age',15],['job','solider']])
dic4 = dict(zip(['name','age'],['cc',18]))
2、字典方法
dic = {'name': 'cc', 'age': 18} value_list = list(dic.values()) # D.keys() -> a set-like object providing a view on D's keys #['cc', 18] key_list = list(dic.keys()) # D.values() -> an object providing a view on D's values #['age', 'name'] l = list(dic.items()) #D.items() -> a set-like object providing a view on D's items #[('name', 'cc'), ('age', 18)] dic2 = {'name':'dd','age':13} dic.update(dic2) # D.update([E, ]**F) -> None. Update D from dict/iterable E and F.盲目覆盖相同键的值 print(dic) dic.pop('age') # D.pop(k[,d]) -> v, remove specified key and return the corresponding value. print(dic) #{'name': 'dd'} # 查看键是否在字典中 print('name' in dic) print('kk' in dic) # setdefault # 1:key存在,则不赋值,key不存在则设置默认值 # 2:key存在,返回的是key对应的已有的值,key不存在,返回的则是要设置的默认值 d = {} print(d.setdefault('a',1))#key不存在,赋默认值 print(d) d = {'a':22} print(d.setdefault('a',1)) print(d)
3、字典视图
dic = {'a': 1, 'b': 2, 'c': 18} for k,v in dic.items(): print(k,v)
4、字典解析
dic = {k:v for (k,v) in zip(['a','b','c'],[1,2,3])} #{'b': 2, 'a': 1, 'c': 3} dic = {x: x*2 for x in [1,2,3,4]} #{1: 2, 2: 4, 3: 6, 4: 8} dic = {c.lower(): c+'!' for c in ['cc','dd','EE']} #{'ee': 'EE!', 'cc': 'cc!', 'dd': 'dd!'} dic = {k:0 for k in ['a','b','c']} #{'b': 0, 'a': 0, 'c': 0} print(dic)
5、字典排序
# 默认是对键排序,即sorted(dic.keys()) dic = {'a':1,'b':4,'c':2} dic = sorted(dic) print(dic) # ['a', 'b', 'c'] for k in sorted(dic): print(k, dic[k]) #对字典按键(key)进行排序 dic = {'a':1,'b':4,'c':2} res1 = sorted(dic.items(),key=lambda i:i[0]) print(res1) #[('a', 1), ('b', 4), ('c', 2)] #对字典按值(value)进行排序 dic = {'a':1,'b':4,'c':2} res2 = sorted(dic.items(),key=lambda i:i[1]) print(res2) #[('a', 1), ('c', 2), ('b', 4)]
6、字典找最大值的键
d = dict(zip(['a','b','c'],[4,3,2])) #{'c': 2, 'a': 4, 'b': 3} s = max(d) # 默认按key找 print(s) # c # max(iterable, key, default),求迭代器的最大值,其中iterable 为迭代器, # max会遍历一遍这个迭代器,然后将迭代器的每一个返回值当做参数传给key=func 中的func res = max(d,key=lambda k:d[k]) # 按value找 print(res) # a
练习1:
有如下值集合[11, 22, 33, 44, 55, 66, 77, 88, 99, 100],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中
即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
# (1)方法1: l = [11, 22, 33, 44, 55, 66, 77, 88, 99, 100] dict1 = {'key1': list(filter(lambda x: x > 66, l)), 'key2': list(filter(lambda x: x < 66, l))} print(dict1) # (2)方法2: a = {'k1':[],'k2':[]} for i in l: if i<66: a['k1'].append(i) else: a['k2'].append(i) print(a)
练习2:
统计s='hello alex alex say hello sb sb'中每个单词的个数
结果如:{'hello': 2, 'alex': 2, 'say': 1, 'sb': 2}
# (1)方法1: s = 'hello cc llll vv nightgood cc vv cc' dict1 = {} for i in s.split(' '): if i in dict1: #这时候已经在字典中了,那么就加1 dict1[i] += 1 else: #第一次出现的情况 dict1[i] = 1 print(dict1) # (2)方法2: s = 'hello cc llll vv nightgood cc vv cc' dic = {} for item in s.split(' '): dic[item] = s.count(item) print(dic) # (3)方法3: s='hello alex alex say hello hh hh' l = s.split() dic = {i:l.count(i) for i in l} print(dic) # (4)方法4:利用setdefault s = 'hello cc llll vv nightgood cc vv cc' dic={} words=s.split() for word in words: #word='alex' dic.setdefault(word,s.count(word)) print(dic) # (5)方法5:利用set s = 'hello cc llll vv nightgood cc vv cc' dic={} words=s.split() words_set = set(words) for i in words_set: #减少了循环次数 dic[i] = s.count(i) print(dic)