概 述:Python字典 –- 字典。字典是一种通过名字来引用值的结构,是Python中唯一内建的映射数据类型。字典是由一组组键值对组成的。键可以是数字,字符串甚至是元组;值是Python中的各种有效的数据类型。当索引不满足于我们的需求时,可以使用字典。
1 字典的创建
1.1快捷方式创建字典
1 2 3 4 | >>> phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'} >>> phonebook {'Beth': '9102', 'Alice': '2341', 'Ceil': '3258'} |
1.2 dic函数
1 2 3 4 5 6 7 | >>> items = [('name','Gumby'),('age',42)] >>> d = dict(items) >>> d {'age': 42, 'name': 'Gumby'} >>> d = dict(name='Gumby',age=42) >>> d {'age': 42, 'name': 'Gumby'} |
2 基本字典操作
2.1 返回键值对的数量
1 2 3 4 5 | >>> d = dict(name='Gumby',age=42) >>> d {'age': 42, 'name': 'Gumby'} >>> len(d) 2 |
2.2 返回关联到键上的值
1 2 3 | >>> phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'} >>> phonebook['Beth'] '9102' |
2.3 将值关联到键上
1 2 3 4 | >>> phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'} >>> phonebook['Beth'] = "5211314" >>> phonebook {'Beth': '5211314', 'Alice': '2341', 'Ceil': '3258'} |
2.4 删除键值对
1 2 3 4 | >>> phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'} >>> del phonebook['Beth'] >>> phonebook {'Alice': '2341', 'Ceil': '3258'} |
2.5 检查成员资格
1 2 3 4 | >>> phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'} >>> 'Alice' in phonebook True >>> |
说明:
- 字典中的键可以是任意的不可变类型。
- 即使键不存在,也可以为它赋值,这样字典就会建立新的项。
- 成员资格查找的是键,而不是值。
1 2 3 4 | >>> x= {} >>> x[42] = "Hinata" >>> x {42: 'Hinata'} |
2.6 字典的格式化字符串
在每一个转换说明符中的%字符后面,可以加上键,后面再跟上其他的元素说明。
1 2 3 | >>> phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'} >>> "Alice's phone number is %(Alice)s" % phonebook "Alice's phone number is 2341" |
3 字典方法
3.1 clear
函数功能:清除字典中的所有的项。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> name = {} >>> name {} >>> name['name'] = 'Hinata' >>> name['age'] = 16 >>> name {'age': 16, 'name': 'Hinata'} >>> return_value = name.clear() >>> return_value >>> name {} >>> print return_value None >>> |
3.2 copy
函数功能:返回一个具有相同键-值对的新字典,这个方法实现的是潜复制。
1 2 3 4 5 6 7 8 9 10 11 12 | >>> person = {'name':'Hinata','machine':['foo','bar','baz']} >>> person_cp = person.copy() >>> person_cp['name'] = 'XLX' >>> person {'machine': ['foo', 'bar', 'baz'], 'name': 'Hinata'} >>> person_cp {'machine': ['foo', 'bar', 'baz'], 'name': 'XLX'} >>> person_cp['machine'].remove('foo') >>> person {'machine': ['bar', 'baz'], 'name': 'Hinata'} >>> person_cp {'machine': ['bar', 'baz'], 'name': 'XLX'} |
从上述代码可以看出,copy()函数只是复制了字典中值的引用,所以在修改person_cp中的列表中的时候,person随之改变。为避免这个问题,可以使用深复制。代码如下:
1 2 3 4 5 6 7 8 | >>> from copy import deepcopy >>> person = {'name':'Hinata','machine':['foo','bar','baz']} >>> person_cp = deepcopy(person) >>> person_cp['machine'].remove('foo') >>> person {'machine': ['foo', 'bar', 'baz'], 'name': 'Hinata'} >>> person_cp {'machine': ['bar', 'baz'], 'name': 'Hinata'} |
3.3 fromkeys
函数功能:使用给定的键创建字典,每个键对应一个默认的值None。
1 2 3 4 5 6 | >>> person = dict.fromkeys(['name','age']) >>> person {'age': None, 'name': None} >>> person = {}.fromkeys(['name','age','machine']) >>> person {'machine': None, 'age': None, 'name': None} |
3.4 get
函数功能:访问字典项。当get访问一个不存在的键时,得到None值。
1 2 3 4 5 6 7 8 9 10 11 12 | >>> person = {} >>> print person['name'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'name' >>> print person.get('name') None >>> print person.get('name','自己设置默认值') 自己设置默认值 >>> person['name'] = 'Hinata' >>> print person.get('name','自己设置默认值') Hinata |
3.5 has_key
函数功能:检查字典中是否含有特定的键,相当于检查成员资格。
1 2 3 4 5 6 | >>> person = {} >>> person.has_key('name') False >>> person['name'] = 'hinata' >>> person.has_key('name') True |
3.6 items和iteritems
函数功能:
items: 将字典中的所有项以列表的方式返回。
iteritems: 将字典中的所有项以迭代器的方式返回
1 2 3 4 5 6 7 | >>> person = {'name':'Hinata','age':16} >>> person.items() [('age', 16), ('name', 'Hinata')] >>> person.iteritems() <dictionary-itemiterator object at 0x7f44131e0d08> >>> list(person.iteritems()) [('age', 16), ('name', 'Hinata')] |
3.7 keys和iterkeys
函数功能:
keys: 将字典中的所有键以列表的方式返回。
iterkeys: 将字典中的所有键以迭代器的方式返回
1 2 3 4 5 6 7 | >>> person = {'name':'Hinata','age':16} >>> person.keys() ['age', 'name'] >>> person.iterkeys() <dictionary-keyiterator object at 0x7f44131e0d08> >>> list(person.iterkeys()) ['age', 'name'] |
3.8 pop
函数功能:pop返回对应于给定键的值,然后移除该键值对
1 2 3 4 5 | >>> person = {'name':'Hinata','age':16} >>> person.pop('age') 16 >>> person {'name': 'Hinata'} |
3.9 popitem
函数功能:弹出一个随机的键值对
1 2 3 4 5 | >>> person = {'name':'Hinata','age':16} >>> person.popitem() ('age', 16) >>> person {'name': 'Hinata'} |
3.10 setdefault
函数功能:当键存在,则返回相应的值。当键不存在,则返回默认值并且相应地更新字典。
1 2 3 4 5 6 7 8 9 10 | >>> person = {'name':'Hinata','age':16} >>> person.setdefault('name') 'Hinata' >>> person.setdefault('phone','5201314') '5201314' >>> person {'phone': '5201314', 'age': 16, 'name': 'Hinata'} >>> person.setdefault('lover') >>> person {'phone': '5201314', 'age': 16, 'name': 'Hinata', 'lover': None} |
3.10 update
函数功能:利用一个字典更新另一个字典。提供的字典中的项会被添加到旧字典中,若有相同的键则会进行覆盖。
1 2 3 4 5 6 | >>> person = {'name':'Hinata','age':16} >>> person2 = {'name':'XLX','like':'cat'} >>> person.update(person2) >>> person {'age': 16, 'name': 'XLX', 'like': 'cat'} >>> |
3.11 values 和 itervalues
函数功能:
values: 以列表的形式返回字典中的值
itervalues: 以迭代器的形式返回字典中的值
返回的列表中可以有相同的元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> d = {} >>> d[1] = 5 >>> d[2] = 2 >>> d[3] = 0 >>> d[4] = 1 >>> d[5] = 3 >>> d[6] = 1 >>> d[7] = 4 >>> d.values() [5, 2, 0, 1, 3, 1, 4] >>> d.itervalues() <dictionary-valueiterator object at 0x7f44131e0d08> >>> list(d.itervalues()) [5, 2, 0, 1, 3, 1, 4] |