Python数据类型:字典

来源:互联网 发布:php 身份证号获取地区 编辑:程序博客网 时间:2024/05/16 10:16

数据类型:字典

字典是一种无序的映射的集合,包含一系列的“键:值”对。字典常量用花括号表示,如{'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 xTrue>>> 'sex' in xFalse

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的键视图>>> kxdict_keys(['b', 'a'])>>> y={'b':3,'c':4}>>> ky=y.keys()         #返回y的键视图>>> kydict_keys(['b', 'c'])>>> kx-ky               #求差集{'a'}>>> kx|ky               #求并集{'b', 'a', 'c'}>>> kx&ky               #求交集{'b'}>>> kx^ky               #求对称差集{'a', 'c'}>>>