字典通过‘键-值’关系进行映射,字典上是python中唯一的内建映射类型。键可以是数字,字符串甚至元组。
字典的创建和使用
1.字典可以这样创建:
>>> phonebook={'Alice':'2341','Beth':'9102','Cecil':'3258'}
>>> phonebook['Alice']
>'2341'
注意字典中的键是唯一的,而值并不唯一。
2. dict函数
使用dict函数,通过其他映射或者‘键-值’对的序列建立字典。
>>> items=[('Name','Gumby'),('age',42)]
>>> d=dict(items)
>>> d
>{'Name': 'Gumby', 'age': 42}
dict函数也可以通过关键字参数创建字典:
>>> d=dict(name='Gumby',age=42)
>>> d
>{'name': 'Gumby', 'age': 42}
基本的字典操作
1.字典的基本行为:
- len(d) 返回字典中项的数量
- d[k]返回关联到键k上的值
- d[k] = v将值v关联到键k上
- del d[k]删除键为k的项
- k in d检查d中是否有含有键为k的项
2.字典和列表的区别
字典和列表的主要区别有:
- 键类型:字典的键不一定是整形数据,可以是任意不可变类型。
- 自动添加:即使键起初在字典中并不存在,也可以为其赋值,这样字典就会建立新项。
例如:
>>> x=[]
>>> x[42]='Foobar'
Traceback (most recent call last):
File "<pyshell#77>", line 1, in <module>
x[42]='Foobar'
IndexError: list assignment index out of range
>>> x=[None]*43
>>> x[42]='Foobar'
>>> x
>[None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'Foobar']
>>> x={}
>>> x[42]='Foobar'
>>> x
>{42: 'Foobar'}
- 成员资格:对字典来说,k in d(d为字典)查找的是键;对列表来说,v in l(l为列表)查找的是值。
字典方法
1.clear
clear清除字典中的所有项,无返回值。
>>> x={}
>>> x['name']='Gumby'
>>> x['age']=42
>>> x
>{'name': 'Gumby', 'age': 42}
>>> x.clear()
>>> x
>{}
2.copy
copy返回一个具有相同键-值对的新字典。copy实现浅复制。
>>> x={'name':'admin','machine':['foo','bar','baz']}
>>> x
>{'name': 'admin', 'machine': ['foo', 'bar', 'baz']}
>>> y=x.copy()
>>> y
>{'name': 'admin', 'machine': ['foo', 'bar', 'baz']}
>>> y['name']='mlh'
>>> y['machine'].remove('bar')
>>> y
>{'name': 'mlh', 'machine': ['foo', 'baz']}
>>> x
>{'name': 'admin', 'machine': ['foo', 'baz']}
在副本中 替换值时,原始字典不受影响,但是若修改某个值(原地修改而不是替换)原始字典也会改变,因为同样的值也存储在原字典中。
可以使用深复制,复制其包含的所有值。
>>> from copy import deepcopy
>>> d={}
>>> d['name']=['Alfred','Bertrand']
>>> c=d.copy()
>>> dc=d.deepcopy(d)
>>> dc=deepcopy(d)
>>> d['name'].append('Clive')
>>> c
>{'name': ['Alfred', 'Bertrand', 'Clive']}
>>> d
>{'name': ['Alfred', 'Bertrand', 'Clive']}
>>> dc
>{'name': ['Alfred', 'Bertrand']}
3.fromkeys
fromkeys使用给定的键建立新的字典,每个键对应一个默认值None。
>>> d=dict.fromkeys(['name','age'],'unknown')
>>> d
>{'name': 'unknown', 'age': 'unknown'}
4.get
get用来访问字典里的项。
>>> d={}
>>> print(d['name'])
>Traceback (most recent call last):
File "<pyshell#115>", line 1, in <module>
print(d['name'])
KeyError: 'name'
>>> print(d.get('name'))
>None
5.items
items 将字典所有项以列表形式返回:
>>> d={'sex': 'male', 'name': 'Eric', 'age': 42}
>>> d.items()
>dict_items([('sex', 'male'), ('name', 'Eric'), ('age', 42)])
6.keys
keys将字典中的键以列表形式返回:
>>> d.keys()
>dict_keys(['sex', 'name', 'age'])
7.pop
pop方法返回对应于键的值,并将该‘键-值’删除:
>>> d.pop('sex')
>'male'
>>> d
>{'name': 'Eric', 'age': 42}
8.popitem
>>> d={'sex': 'male', 'name': 'Eric', 'age': 42}
>>> d.popitem()
>('sex', 'male')
>>> d
>{'name': 'Eric', 'age': 42}
9.setdefault
setdefault能够获得给定键关联的值,还能再字典中不含有给定键的情况下设定相应键值。当键不存在时,setdefault返回默认值并相应更新字典,若键存在则返回其对应的值,不更新字典。
>>> d={'name': 'Eric', 'age': 42}
>>> d.setdefault('sex','male')
>'male'
>>> d
>{'sex': 'male', 'name': 'Eric', 'age': 42}
>>> d.setdefault('name','Jack')
>'Eric'
>>> d
>{'sex': 'male', 'name': 'Eric', 'age': 42}
10.update
update使用一个字典来更新另一个字典。
>>> d={'sex': 'male', 'name': 'Eric', 'age': 42}
>>> x={'name':'Jack'}
>>> x
>{'name': 'Jack'}
>>> d.update(x)
>>> d
>{'sex': 'male', 'name': 'Jack', 'age': 42}
12.values
>>> d={}
>>> d[1]=1
>>> d[2]=2
>>> d[3]=3
>>> d[4]=1
>>> d.values()
>dict_values([1, 2, 3, 1])