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)

 

posted @ 2021-04-03 17:47  cheng4632  阅读(74)  评论(0编辑  收藏  举报