py06-python基础-字典
1、字典:
作用:存多个值,key-value存取,取值速度快,字典是无序的。
定义:key必须是可变类型,value可以是任意类型
定义方式:
info={'name':'egon','age':18,'sex':'male'}
本质上
info=dict({'name':'egon','age':18,'sex':'male'})
或
info=dict(name='egon',age=18,sex='male')
或
{}.fromkeys(('name','age','sex'),None)
info=dict.fromkeys(('name','age','sex'),None)
2、常用操作
取值:
info=dict(name='egon',age=18,sex='male') print(info['name']) #如果key值不存在,会报错
获取值:
info=dict(name='egon',age=18,sex='male') print(info.get('name')
info=dict(name='egon',age=18,sex='male')
print(info.get('name1','not key'))
#如果key值不存储,不会报错,会打印none,也可以指定值不存在时,打印信息
存值:
info={'name':'egon','age':18,'sex':'male'} info['height']=1.90 print(info)
删除值:
info={'name':'egon','age':18,'sex':'male'} info['height']=1.90 print(info.pop('age')) print(info)
#如果key值不存在,会报错
解决:
info={'name':'egon','age':18,'sex':'male'}
info['height']=1.90
print(info.pop('age1','not key'))
print(info)
#不存在时,自定义打印,也可以是None
info={'name':'egon','age':18,'sex':'male'}
info['height']=1.90
print(info.pop('age1',None))
print(info)
字典中的key是不可变类型,value是可变类型
key不可用是字符串,数字
key可以是元组,列表
cmd={'(a,b)':1} print(cmd['(a,b)'])
字典的其他操作:
弹出key和value
info={'name':'egon','age':18,'sex':'male'} print(info.popitem()) print(info)
获取字典所有的key
info={'name':'egon','age':18,'sex':'male'} print(info.keys())
获取字典所有的value
info={'name':'egon','age':18,'sex':'male'} print(info.values())
for循环获取key
info={'name':'egon','age':18,'sex':'male'} for key in info.keys(): print(key)
for循环获取value
info={'name':'egon','age':18,'sex':'male'} for value in info.values(): print(value)
获取所有key和value,然后存储到一个小元组里面
info={'name':'egon','age':18,'sex':'male'} print(info.items())
一一对应的例子
key,value=('a','b') print(key) print(value)
直接获取字典的key和value
info = {'name': 'egon', 'age': 18, 'sex': 'male'} for key,value in info.items(): print(key,value)
拷贝一个字典
info = {'name': 'egon', 'age': 18, 'sex': 'male'} l=info.copy() print(l)
清空字典
info = {'name': 'egon', 'age': 18, 'sex': 'male'} info.clear() print(info)
更新字典
info = {'name': 'egon', 'age': 18, 'sex': 'male'} cmd={'hobby':'play1'} info.update(cmd) print(info)
#用cmd 这个字典去更新info这个字典,没有的会添加,如果有的会更新
info = {'name': 'egon', 'age': 18, 'sex': 'male'}
cmd={'name':'sb'}
info.update(cmd)
print(info)
空字典,追加内容
d={} print(d) d['name']='egon' d['age']=19 d['sex']='male' d['hobby']=[] d['hobby'].append('play1') d['hobby'].append('play2') d['hobby'].append('play3') print(d)
#由于hobby可以是多个值,需要列表,这种方法,只能先定义一个空的列表,然后再添加值
空字典setfefault 会自动生成列表
d={} d['name']='egon' d['age']=19 d['sex']='male' d.setdefault('hobby',[]) print(d)
#直接定义列表,然后再添加值
d={}
d['name']='egon'
d['age']=19
d['sex']='male'
d.setdefault('hobby',[]).append('play1')
d.setdefault('hobby',[]).append('play2')
d.setdefault('hobby',[]).append('play2')
print(d)
练习题
1 有如下值集合 [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
d=[11, 22, 33, 44, 55, 66, 77, 88, 99, 90] l={ 'k1':[], 'k2':[], } for key in d: if key > 66: l['k1'].append(key) else: l['k2'].append(key) print(l)
2 统计s='hello alex alex say hello sb sb'中每个单词的个数
结果如:{'hello': 2, 'alex': 2, 'say': 1, 'sb': 2}
s='hello alex alex say hello sb sb' l={} word=s.split() for words in word: if words not in l: l[words]=1 else: l[words]+=1 print(l)
www.sysgit.com