pythonDict

dict()创建字典

Dictionary由key/value对(称为项目)组成,keyvalue之间用“”分割,项目用“,”分割,所有项目用“{}”包括起来

使用dict()函数可以从Mapping(如其它的Dictionary)或key/value形式的Sequence创建Dictionary:

1
2
3
4
5
6
7
8
9
10
11
>>> items = [('name', 'Gumby'), ('age', 42)]
>>> d = dict(items)
>>> d {'age': 42, 'name': 'Gumby'}
也可以用keyword参数来创建Dictionary:
>>> d = dict(name='Gumby', age=42)
>>> d {'age': 42, 'name': 'Gumby'}
  • Dictionary支持Sequence的基本操作,但要注意下面几点:
  • key值可以是任何类型,但必须是不可变类型,如整数、浮点数、String、Tuple
  • 对项目赋值时,如果key值不存在,会新建项目:

基本Dictionary操作

clear()方法,将字典所有内容清除:

1
2
3
4
5
6
>>> d = {'age' : 12, 'name' : 'bob'}
>>> d
{'age': 12, 'name': 'bob'}
>>> d.clear()
>>> d
{}

有人可能会问为什么不直接d={}?

看下面的例子:

1
2
3
4
5
>>> d = {'age' : 12, 'name' : 'bob'}
>>> x = d
>>> d = {}
>>> x
{'age': 12, 'name': 'bob'}

再看下面:

1
2
3
4
5
>>> d = {'age' : 12, 'name' : 'bob'}
>>> x = d
>>> d.clear()
>>> x
{}

所以如果要真正清除一个字典要用clear

复制

1
2
3
4
5
6
7
>>> d = {'age' : 12, 'name' : 'bob'}
>>> y = d.copy()
>>> y['age'] = 32
>>> d
{'age': 12, 'name': 'bob'}
>>> y
{'age': 32, 'name': 'bob'}

复制后 y 的修改与 d 无关

但如果一个字典中有引用类型,如list,复制只会复制其引用而不会复制其值:

1
2
3
4
5
6
7
>>> d = {'names': ['bob', 'sam']}
>>> y = d.copy()
>>> y['names'][0] = 'jack'
>>> y
{'names': ['jack', 'sam']}
>>> d
{'names': ['jack', 'sam']}

如果要克服这个困难,那就必须用“深复制“:

1
2
3
4
5
6
7
8
>>> from copy import deepcopy
>>> d = {'names': ['bob', 'sam']}
>>> y = deepcopy(d)
>>> y['names'][0] = 'jack'
>>> d
{'names': ['bob', 'sam']}
>>> y
{'names': ['jack', 'sam']}

get

先看一个例子:

1
2
3
4
5
6
7
8
9
>>> d = {}
>>> d['name']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'name'
>>> print d.get('name')
None
>>> d.get('name', 'N/A')
'N/A'

如果用索引直接访问一个不存在的值,Python会报错,但是如果用get方法会返回一个默认值,通过传入第二个参数来自定义一个默认值

键是否存在?

有两种方法来查询:

1
2
3
4
5
>>> d = {'age' : 12, 'name' : 'bob'}
>>> 'age' in d
True
>>> d.has_key('age')
True

可以用in关键字也可以通过has_key方法

键和值

将键、值、键值转换成List

1
2
3
4
5
6
7
>>> d = {'age' : 12, 'name' : 'bob'}
>>> d.keys()
['age', 'name']
>>> d.values()
[12, 'bob']
>>> d.items()
[('age', 12), ('name', 'bob')]

设默认值-

当你要确保一个字典中确保有某个键时,可以用setdefault

1
2
3
4
5
6
7
8
9
10
>> d = {}
>>> d.setdefault('name', 'N/A')
'N/A'
>>> d
{'name': 'N/A'}
>>> d['name'] = 'bob'
>>> d.setdefault('name', 'N/A')
'bob'
>>> d
{'name': 'bob'}

setdefaultget十分类似,都返回查询的值,但是setdefault将默认值加入字典中。

热评文章