字典是一种无序的映射的集合,包含一列的“键:值”
字典常用花括号表示:{}
特点:
字典的键通常采用字符串,但也可以用数字、元组等不可变的类型
字典值可以是任意类型
字典也成为了关联数组或散列表,它通过键映射到值,字典是无序的,它通过键来索引映射的值,而不是通过位置来索引
字典属于可变映射,通过索引来修改键映射的值
字典长度可变,可为字典添加或删除“键:值”对
字典可以任意嵌套,即映射的值可以是一个字典
字典存储的是对象的引用,而不是兑现本身
字典基本操作
字典基本操作包括创建字典、求长度、关系判断和索引等
创建字典
>>>{} #创建空字典
>{}
>>>dict{}#创建空字典
>{}
#使用字典常量
>>>{'name':'Molly','age':18,'sex':'f'}
>{'sex':'f','age':18,'name':'Molly'}
#使用嵌套的字典
>>>{'book':{'Python':100,'C++':99}}
>{'book':{'c++':99,'Python':100}}
#用数字作为键
>>>{1:'one',2:'two',3:'three'}
>{1:'one',2:'two',3:'three'}
#用元组作为键
>>>{(1,3,5):10,(2,4,6):50}
>{(1,3,5):10,(2,4,6):50}
#使用赋值格式的键值对创建字典
>>>dict(name='Molly',age=18)
>{'age':18,'name':'Molly'}
#使用包含键元组和值元组的列表创建字典
>>>dict([('name','Molly'),('age',18)])
>{'age':18,'name':'Molly'}
#创建无映射值得字典,默认值为None
>>>dict.fromkeys(['name','age'])
>{'name':None,'age':None}
#创建值相同的字典
>>>dict.fromkeys(['name','age'],0)
>{'name':0,'age':0}
#使用字符串创建无映射值的字典
>>>dict.fromkeys('abc')
>{'a':None,'b':None,'c':None}
#使用字符串和映射值创建字典
>>>dict.fromkeys('abc',10)
>{'a':10,'b':10,'c':10}
#使用自拍解析键值列表创建字典
>>>dict(zip(['name','age'],['Molly',18]))
>{'age':18,'name':'Molly'}
>>>x={}#创建一个空字典
>>>x['name']='Molly'#通过赋值添加“键:值”对
>>>x['age']=18
>>>x
>{'age':18,'name':'Molly'}
>>> a = dict(one=1, two=2, three=3)
>>> b = {'one': 1, 'two': 2, 'three': 3}
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> e = dict({'three': 3, 'one': 1, 'two': 2})
求长度
len()方法可返回字典长度,即“键:值”对的个数
>>>x=dict(zip(['name','age'],['Molly',18]))
>>>len(x)
>2
关系判断
in操作符可用于判断字段是否包含某个键
>>>x=dict(zip(['name','age'],['Molly',18]))
>>>'name' in x
>Ture
索引
通过键来索引映射的值
>>>x={'book':{'Python':100,'C++':99},'WM':'太完美'}
>>>x['book']
>{'Python':100,'C++':99}
>>>x['WM']
>{'太完美'}
>>>X['booke']['Python'] #用两个键索引嵌套的字典
>100
通过索引修改映射值
>>>x=dict(name='Molly',age=18)
>>>x
>{'age':18,'name':'Molly'}
>>>x['age']=20
>>>x
>{'age':20,'name':'Molly'}
>>>x['phone']='123456789'
>>>x
>{'phone':'123456789','age':20,'name':'Molly'}
通过索引删除键值对
>>>x={'name':'Molly','age':18}
>>>del x['name']
>>>x
>{'age':18}
字典常用方法
1.clear()
删除全部字典对象
>>>x=dict(name='Molly',age=18)
>>>x.clear()
>>>x
>{}
2.copy()
复制字典对象
>>>x={'name':'Molly','age':18}
>>>y=x
>>>x,y
>({'age':18,'name':'Molly'},{'age':18,'name':'Molly'})
>>>y['name']='MOLI' #通过已修改字典
>>>x,y
>({'age':18,'name':'MOLI'},{'age':18,'name':'MOLI'})
>>>y is x #判断是否引用相同对象
>True
>>>y=x.copy() #y引用复制的字典
>>>y['name']='MoLi'#修改y引用的字典映射值,此时不影响x的引用
>>>x,y
>({'age':18,'name':'MOLI'},{'age':18,'name':'MoLi'})
>>>y is x #判断是都引用相同对象
>False
3.get(key[,default])
返回键key映射的值,如果key不存在,返回空值。可用default参数指定不存在的键的返回值
>>>x={'name':'Molly','age':18}
>>>x.get('name')
>'Molly'
>>>x.get('sex')#不存在的键返回空值
>>>print(x.get('sex'))
>None
>>>x.get('sex','xxx')#不存在的键返回指定值
>'xxx'
4.pop(key[,default])
从字典中删除键,并返回映射值,若键不存在,则返回default;未指定default参数时,则会出错
>>>x={'name':'Molly','age':18}
>>>x.pop('name')
>'Molly'
>>>x
>{'age':18}
>>>x.pop('sex','xxx')#删除不存在的键
>'xxx'
>>>x.pop('sex')#删除不存在的键,未指定default
>KeyErro:...
5.popitem()
从字典删除并返回键值对元组。空字典调用该方法会产生KeyErro错误
>>>x={'name':'Molly','age':18}
>>>x.popitem() #删除并返回键值对元组
>('age',18)
>>>x
>{'name':'Molly'}
>>>x.popitem()
>('name','Molly')
>>>X
>{}
6.setdefault(key[,default])
返回映射值或为字典添加键值对,指定键key在字典中存在时,返回映射值。若指定键key不存在,则添加“key:default”键值对,省略default时,映射值默认为None
>>>x={'name':'Molly','age':18}
>>>x.setdefault('name')
>'Molly'
>>>x.setdefault('sex')
>>>x
>{'sex':None,'age':18,'name':'Molly'}
>>>x.setdefault('phone','123456789')
>>>x
>{'sex':None,'phone':'123456789','age':18,'name':'Molly'}
7.update(other)
用于为字典添加键值。参数other可以是另一个字典或用赋值格式表示的元组,若字典已存在同名的键,则映射值被覆盖
>>>x={'name':'Molly','age':18}
>>>x.update({'age':20,'sex':'f'})
>>>x
>{'sex':'f','age':20,'name':'Molly'}
>>>x.update(name='MOLI')
>>>x
>{'sex':'f','age':20,'name':'MOLI'}
>x.update(code = 10,address='newStreet')
>{'sex':'f','address':'newStreet','age':20,'code':10,'name':'MOLI'}
字典视图
字典的items()、keys()和value()方用于返回字典键值对的视图对象。视图对象支持迭代操作,并可反映未来对字典的修改。视图对象不是列表,不支持索引。通常用list()方法将视图对象转换为列表
1.items()
返回键值对视图
>>>x={'name':'Molly','age':18}
>>>y=x.items()
>>>y #显示键值对视图,键值对视图为dict_items对象
>dict_items([('age',18),('name','Molly')])
>>>for a in y:print(a) #迭代键值对视图
>>>x
>('age',18)
>('name','Molly')
>>>x['age']=20 #修改字典
>>>x
>{'age':20,'name':'Molly'}
>>>y #从显示结果可以看出视图反映了字典中的修改内容
>dict_items([('age',20),('name','Molly')])
>>>list(y) #将键值对视图转换为列表
>[('age',20),('name','Molly')]
2.keys()
返回字典中所有键的视图
>>>x={'name':'Molly','age':18}
>>>y=x.keys()#返回键的视图
>>>y#显示键视图,键视图为dict_keys对象
>dict_keys(['age','name'])
>>>x['sex']='f'#为字典添加键值对
>>>x
>{'sex':'f','age':20,'name':'Molly'}
>>>y#显示结果说明键视图包含了新添加的键
>dict_keys(['sex','age','name'])
>>>list(y)#将键视图转换为列表
>['sex','age','name']
3.values()
返回字典中全部值得视图
>>>x={'name':'Molly','age':18}
>>>y=x.values()#返回字典的值视图
>>>y#显示值视图,值视图为dict_values对象
>dict_value([18,'Molly'])
>>>x['sex']='f'#添加键值对
>>>y#值视图包含了新添加的值
>dict_value(['f',18,'Molly'])
4.键视图的集合操作
键视图支持各种集合运算,键值对视图和值视图不支持集合运算
>>>x={'a':1,'b':2}
>>>kx=x.keys()
>>>kx
>dict_keys(['a','b'])
>>>y={'b':3,'c':4}
>>>ky=y.keys()
>>>ky
>dict_keys(['c','b'])
>>>kx-ky#求差集
>{'a'}
>>>kx|ky#求并集
>{'a','b','c'}
>>>kx&ky#求交集
>{'b'}
>>>kx^ky#求对称差集
>{'a','c'}
集合
集合是无序的
一堆元素用花括号括起来
集合中的元素具有唯一性
使用{}或者set()方法创建集合
>>>num={}
>>>type(num)
>
>>>num1={1,2,3,4,5}
>>>type(num1)
>
>>>num2={1,1,2,5,5,3,1,2,4,6,6,7,8}
>>>num2
>{1, 2, 3, 4, 5, 6, 7, 8}
>>>set1 = set([1,2,3,5,6,4])
>{1, 2, 3, 4, 5, 6}
>>>type(set1)
>
去除列表中重复的数字
未用集合的方式
>>>num=[1,2,3,4,4,5,1,4,6,0,1]
>>>temp =[]
>>>for each in num:
if each not in temp:
temp.append(each)
>>>temp
>[1,2,3,4,5,6,0]
使用集合的方式
用set得到的集合是无序的,可以使用list方法就可以对集合进行排序
>>>num = [1,2,3,4,4,5,1,4,6,0,1]
>>>num = list(set(num))
>>>num
>[0,1,2,3,4,5,6]
可以使用in或not in来判断一个元素是否在集合中已经存在
>>>num2={1, 2, 3, 4, 5, 6, 7, 8}
>>>1 in num2
>True
>>>'1' in num2
>False
集合中的方法
>>>num2={1, 2, 3, 4, 5, 6, 7, 8}
>>>num2.add(9)
>>>num2
>num2={1, 2, 3, 4, 5, 6, 7, 8,9}
>>>num2.remove(9)
>>>num2
>{1, 2, 3, 4, 5, 6, 7, 8}
不能被随意的增加或者减少,使用frozen,比可变集合
>>>num = frozenset([1,2,3,4,5])
>>>num.add(6)
>Traceback (most recent call last):
File "", line 1, in
num.add(6)
AttributeError: 'frozenset' object has no attribute 'add'