数据类型:字典
字典是一种无序的映射的集合,包含一系列的“键:值”对。字典常量用花括号表示,如{'name':'John','age':25,'sex':'male'}。其中,字符串name、age和sex为键,字符串John和male以及数字25为值。
1、字典的特点
字典具有下列主要特点
- 字典的键通常采用字符串,但也可以用数字、元组等不可变的类型。
- 字典值可以是任意类型。
- 字典也可称为关联数组或散列表,它表示键映射到值。字典是无序的,他通过键来索引映射的值,而不是通过位置来索引。
- 字典属于可变映射,通过索引来修改映射的值。
- 字典长度可变,可为字典添加和删除“键:值”对。
- 字典可以任意嵌套,即键映射的值可以是一个字典。
- 字典存储的是对象的引用,而不是对象本身。
2、字典基本操作
字典基本操作包括创建字典、求长度、关系判断和索引等。
1.创建字典
可用多种方法来创建字典。例如:
>>> {} #创建空字典
{}
>>> dict() #创建空字典
{}
>>> {'name':'John','age':25,'sex':'male'} #使用字典常量
{'age': 25, 'name': 'John', 'sex': 'male'}
>>> {'book':{'Python program':100,'C++ 入门':99}}#使用嵌套的字典
{'book': {'Python program': 100, 'C++ 入门': 99}}
>>> {1:'onw',2:'two'} #用数字作为键
{1: 'onw', 2: 'two'}
>>> {(1,3,5):10,(2,4,6):50} #用元组作为键
{(1, 3, 5): 10, (2, 4, 6): 50}
>>> dict(name='John',age=25) #使用赋值格式的键值对创建字典
{'age': 25, 'name': 'John'}
>>> dict([('name','John'),('age',25)]) #使用包含键元组和值元组的列表创建字典
{'age': 25, 'name': 'John'}
>>> dict.fromkeys(['name','age']) #创建无映射值的字典,默认值为None
{'age': None, 'name': None}
>>> dict.fromkeys(['name','age'],0) #创建值相同的字典
{'age': 0, 'name': 0}
>>> dict.fromkeys('abc') #使用字符串创建无映射值字典
{'b': None, 'a': None, 'c': None}
>>> dict.fromkeys('abc',10) #使用字符串和映射值创建字典
{'b': 10, 'a': 10, 'c': 10}
>>> dict(zip(['name','age'],['John',25])) #使用zip解析键值列表创建字典
{'age': 25, 'name': 'John'}
>>> x={} #先创建一个空字典
>>> x['name']='John' #通过赋值添加“键:值”对
>>> x['age']=25
>>> x
{'age': 25, 'name': 'John'}
>>>
2.求长度
len()函数可返回字典长度,即“键:值”对的个数。例如:
>>> x=dict(zip(['name','age'],['John',25]))
>>> len(x)
2
3.关系判断
in操作符可用于判断字典是否包含某个键。例如:
>>> x=dict(zip(['name','age'],['John',25]))
>>> 'name' in x
True
>>> 'sex' in x
False
4.索引
字典通过键来索引映射的值。例如:
>>> x={'book':{'Python编程':100,'C++入门':99},'publish':'人民邮电出版社'}
>>> x['boo']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'boo'
>>> x['book']
{'Python编程': 100, 'C++入门': 99}
>>> x['publish']
'人民邮电出版社'
>>> x['book']['Python编程'] #用两个键索引嵌套的字典
100
可通过索引修改映射值。例如:
>>> x=dict(name='John',age=25)
>>> x
{'age': 25, 'name': 'John'}
>>> x['age']=30 #修改映射值
>>> x
{'age': 30, 'name': 'John'}
>>> x['phone']='17055233456' #试图修改不存在的键的映射值时,添加“键:值”对
>>> x
{'age': 30, 'name': 'John', 'phone': '17055233456'}
>>>
也可以通过索引删除键值对。例如:
>>> x=dict(name='John',age=25)
>>> del x['name'] #删除键值对
>>> x
{'age': 25}
3、字典常用方法
Python为字典提供了一系列处理方法。
1.clear()
复制字典对象。例如:
>>> x=dict(name='John',age=25)
>>> x.clear()
>>> x
{}
2.copy()
复制字典对象。例如:
>>> x={'name':'John','age':25}
>>> y=x #直接赋值时,x和y引用同一个字典
>>> x,y
({'age': 25, 'name': 'John'}, {'age': 25, 'name': 'John'})
>>> y['name']='Curry' #通过y修改字典
>>> x,y #显示结果相同
({'age': 25, 'name': 'Curry'}, {'age': 25, 'name': 'Curry'})
>>> y is x #判断是否引用相同对象
True
>>> y=x.copy() #y引用复制的字典
>>> y['name']='Python' #修改y引用的字典映射值,此时不影响x的引用
>>> x,y
({'age': 25, 'name': 'Curry'}, {'age': 25, 'name': 'Python'})
>>> y is x #判断是否引用相同对象
False
3.get(key[,default])
返回key映射的值。如果key不存在,返回空值。可用default参数指定不存在的键的返回值。例如:
>>> x={'name':'John','age':25}
>>> x.get('name') #返回映射值
'John'
>>> x.get('sex') #不存在的键返回值
>>> x.get('sex','xxx') #不存在的键返回指定值
'xxx'
>>>
4.pop(key[,default])
从字典中删除键,并返回映射值。若键不存在,则返回default;未指定default参数时则会出错。例如:
>>> x={'name':'John','age':25}
>>> x.pop('name') #删除键并返回映射值
'John'
>>> x
{'age': 25}
>>> x.pop('sex','xxx') #删除不存在的键
'xxx'
>>> x.pop('sex') #删除不存在的键,未指定default参数,出错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'sex'
5.popitem()
从字典删除并返回键值对元组。空字典调用该方法会产生KeyError错误。例如:
>>> x={'name':'John','age':25}
>>> x.popitem() #删除并返回键值对元组
('age', 25)
>>> x #x中剩余一个键值对
{'name': 'John'}
>>> x.popitem()
('name', 'John')
>>> x
{}
>>> x.popitem() #空字典产生KeyError错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'popitem(): dictionary is empty'
>>>
6.setdefault(key[,default])
该方法用于返回映射值或者为字典添加键值对。指定键key在字典中存在时,返回映射值。若指定值key不存在,则添加"key:default"键值对,省略default时,键值对默认为None。例如:
>>> x={'name':'John','age':25}
>>> x.setdefault('name') #返回指定键的映射值
'John'
>>> x.setdefault('sex') #键不存在,为字典添加键值对,映射值默认为None
>>> x
{'age': 25, 'name': 'John', 'sex': None}
>>> x.setdefault('phone','123456') #添加键值对
'123456'
>>> x
{'age': 25, 'name': 'John', 'sex': None, 'phone': '123456'}
>>>
7.update(other)
该方法用于为字典添加键值对。参数other可以是另一个字典或用赋值格式表示的元组。若字典已存在同名的键,则映射值被覆盖。例如:
>>> x={'name':'John','age':25}
>>> x.update({'age':30,'sex':'male'}) #添加键值对,并覆盖同名键的映射值
>>> x #age的映射值已被修改
{'age': 30, 'name': 'John', 'sex': 'male'}
>>> x.update(name='Mike') #修改映射值
>>> x
{'age': 30, 'name': 'Mike', 'sex': 'male'}
>>> x.update(code=110,address='NewStreet') #添加键值对
>>> x
{'age': 30, 'address': 'NewStreet', 'name': 'Mike', 'sex': 'male', 'code': 110}
4、字典视图
字典的item ()、keys()和values()方法用于返回字典键值对的试图对象。视图对象支持迭代操作,并可反映未来对字典的修改。试图对象不是列表,不支持索引。通常用list()方法将视图对象转换为列表。
1.items()
items()方法返回键值对视图。例如:
>>> x={'name':'John','age':25}
>>> y=x.items() #返回键值对视图
>>> y #显示键值对视图,键值对视图为dict_items对象
dict_items([('age', 25), ('name', 'John')])
>>> x
{'age': 25, 'name': 'John'}
>>> for a in y:print(a) #迭代键值对视图
...
('age', 25)
('name', 'John')
>>> x['age']=30 #修改字典
>>> x
{'age': 30, 'name': 'John'}
>>> y #从显示结果可以看出视图反映了字典中的修改内容
dict_items([('age', 30), ('name', 'John')])
>>> list(y) #将键值对视图转换为列表
[('age', 30), ('name', 'John')]
>>>
2.keys()
keys()方法返回字典中所有键的视图。例如:
>>> x={'name':'John','age':25}
>>> y=x.keys() #返回字典的键视图
>>> y #显示键视图,键视图为dict_keys对象
dict_keys(['age', 'name'])
>>> x['sex']='male' #为字典添加键值对
>>> x
{'age': 25, 'name': 'John', 'sex': 'male'}
>>> y #显示结果说明键视图包含了新添加的键
dict_keys(['age', 'name', 'sex'])
>>> list(y) #将键视图转换为列表
['age', 'name', 'sex']
>>>
3.values()
values()方法返回字典中全部值的视图。例如:
>>> x={'name':'John','age':25}
>>> y=x.values() #返回字典的值视图
>>> y #显示值视图,值视图为dict_values对象
dict_values([25, 'John'])
>>> x['sex']='male' #添加键值对
>>> y #值视图包含了新添加的值
dict_values([25, 'John', 'male'])
>>> list(y) #将值视图转换为列表
[25, 'John', 'male']
>>>
4.键视图的集合操作
键视图支持各种操作运算,键值对视图和值视图不支持集合运算。例如:
>>> x={'a':1,'b':2}
>>> kx=x.keys() #返回x的键视图
>>> kx
dict_keys(['b', 'a'])
>>> y={'b':3,'c':4}
>>> ky=y.keys() #返回y的键视图
>>> ky
dict_keys(['b', 'c'])
>>> kx-ky #求差集
{'a'}
>>> kx|ky #求并集
{'b', 'a', 'c'}
>>> kx&ky #求交集
{'b'}
>>> kx^ky #求对称差集
{'a', 'c'}
>>>