字典是Python中唯一内建的映射类型。
字典中的值并没有特殊的顺序,但是都存储在一个特定的键(Key)里。键可以是数字、字符串甚至是元组。
某些情况下,字典比列表更加适用:
字典由多个键及与其对应的值构成的对组成。示例:
>>> phonebook = {'a':'001','b':'002','c':'003'} >>> phonebook['a'] '001'
上例中,字母是键,数字是值。每个键和它的值之间用冒号(:)隔开,项之间用逗号(,)隔开,而整个字典是由一堆大括号括起来。空字典仅由两个大括号组成。
>>> items = [('name','Gumby'),('age',42)] >>> d = dict(items) >>> d {'age': 42, 'name': 'Gumby'} >>> d['name'] 'Gumby'
dict 函数也可以通过关键字参数来创建字典:
>>> d = dict(name = 'Python', level = 5) >>> d {'name': 'Python', 'level': 5}
>>> phonebook = {'Beth':'110','Mike':'120','Lily':'119'} >>> "Beth's phone number is %(Beth)s"%phonebook "Beth's phone number is 110"
>>> d = {'a':'b'} >>> d.clear() >>> d {}
>>> x = {'username':'admin','machine':['foo','bar','baz']} >>> y = x.copy() >>> x {'username': 'admin', 'machine': ['foo', 'bar', 'baz']} >>> y['username'] = 'tester' >>> y['machine'].remove('foo') >>> x {'username': 'admin', 'machine': ['bar', 'baz']} >>> y {'username': 'tester', 'machine': ['bar', 'baz']}
可以看到,在副本中替换值的时候,原始字典不受影响,如果修改了某个值,原始的字典也会改变。
避免这个问题的一种方法就是使用深复制(deep copy)>>> from copy import deepcopy >>> d = {} >>> d['names'] = ['Alfred','Bertrand'] >>> c = d.copy() >>> dc = deepcopy(d) >>> d['names'].append('Python') >>> c {'names': ['Alfred', 'Bertrand', 'Python']} >>> d {'names': ['Alfred', 'Bertrand', 'Python']} >>> dc {'names': ['Alfred', 'Bertrand']}
>>> {}.fromkeys(['name','age']) {'age': None, 'name': None}
如果不想使用None作为默认值,也可以自己提供默认值:
>>> {}.fromkeys(['name','age'],'(defalut value)') {'age': '(defalut value)', 'name': '(defalut value)'}
>>> d = {} >>> d.get('name','n/a') 'n/a'
>>> d = {} >>> d.has_key('name') False >>> d['name'] = 'py' >>> d.has_key('name') True
>>> d = {'title':'Python','body':'tester'} >>> d.items() [('body', 'tester'), ('title', 'Python')]
iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表:
>>> it = d.iteritems() >>> it <dictionary-itemiterator object at 0x012199F0> >>> list(it) [('body', 'tester'), ('title', 'Python')]
>>> d = {'a':'b','c':'d'} >>> d.pop('c') 'd' >>> d {'a': 'b'}
>>> d = {'a':'b','c':'d','e':'f','g':'h'} >>> d.popitem() ('a', 'b') >>> d {'c': 'd', 'e': 'f', 'g': 'h'}
>>> d = {} >>> d.setdefault('name','n/a') 'n/a' >>> d {'name': 'n/a'} >>> d['name'] = 'Python' >>> d.setdefault('name','n/a') 'Python' >>> d {'name': 'Python'}
可以看到,当键不存在的时候,setdefault返回默认值并且相应地更新字典。如果键存在,那么就返回与其对应的值,但不改变字典
>>> d = {'title':'python','body':'tester','footer':'fighting'} >>> x = {'title':'position'} >>> d.update(x) >>> d {'body': 'tester', 'footer': 'fighting', 'title': 'position'}
>>> d = {} >>> d[1] = 1 >>> d[2] = 2 >>> d[3] = 3 >>> d[4] = 4 >>> d[5] = 1 >>> d.values() [1, 2, 3, 4, 1]
values方法以列表的形式返回字典中的值。返回值列表可以包含重复的值。
映射:映射可以使用任何不变对象标识元素,最 常用的类型是字符串和元组。