字典
字典Dictionary,在一些变成语言中也称为hash, map, 是一种由键值对组成的数据结构。
顾名思义,我们把键值想象成字典中的单词,值想象成词对应的定义,那么——
一个词可以对应一个或者多个定义,但是这些定义只能通过这个词来进行查询。
基本操作
空字典
Python使用{}或者dict{}来创建一个个空的字典:
a = {}
type{a}
a = dict{}
type(a)
有了dict之后,可以用索引键值的方法向其中添加元素,也可以通过索引来查看元素的值:
插入键值
a["one"] = "this is number 1"
a["two"] = "this is number 2"
a
查看键值
a["one"]
更新键值
a["one"] = "this is number 1, too"
a
初始化字典
可以看到,Python使用key:value这样的结构来表示字典中的元素结构,事实上,可以直接使用这样的结构来初始化一个字典:
b = {"one": "this is number 1", "two": "this is number 2"}
b["one"]
字典没有顺序
当我们print一个字典时, Python并不一定按照插入的键值的先后顺序进行显示,因为字典中的键本身不一定是有序的。
因此, Python中不能用支持数字索引按顺序查看字典中的值,而且数字本身也有可能成为键值,这样会引起混淆。
键必须是不可变的类型
出于hash的目的,Python中要求这些键值对的键必须是不可变的,而值可以是任意的Python的对象。
一个表示近义词的字典:
synonyms = {}
synonyms['mutable'] = ['changeable', 'variable', 'varying', 'fluctuating',
'shifting', 'inconsistent', 'unpredictable', 'inconstant',
'fickle', 'uneven', 'unstable', 'protean']
synonyms['immutable'] = ['fixed', 'set', 'rigid', 'inflexible',
'permanent', 'established', 'carved in stone']
synonyms
使用dict初始化字典
除了通常的定义方式,还可以通过dict()转化来生成字典:
inventory = dict(
[('foozelator', 123),
('frombicator', 18),
('spatzleblock', 34),
('snitzelhogen', 23)
])
inventory
适合做键的类型
在不可变类型中,整数和字符串是字典中最常用的类型;而浮点数通常不推荐用来做键, 原因是因为浮点数的精度问题所导致的。
字典方法
get方法
之前已经见过, 用索引可以找到一个键对应的值,但是当字典中并没有这个键的时候,Python会报错,这个时候可以使用字典get方法来处理这种情况,其用法如下:
print a.get("three")
pop方法删除元素
pop方法可以用来弹出字典中某个键对应的值,同时也可以指定默认参数:
d.pop(key, default = None)
删除并返回字典中键key对应的值,如果没有这个键,返回default指定的值(默认是None)。
与列表一样, del 函数可以用来删除字典中特定的键值对,例如:
del a["one"]
a
update方法更新字典
之前已经知道,可以通过索引来插入,修改单个键值对,但是如果想对多个键值对进行操作,这种方法就显得比较麻烦,好在有update方法:
d.update(newd)
将字典newd中的内容更新到d中去。
person_modifications = {'first': 'James', 'middle': 'Clerk'}
person.update(person_modifications)
print person
in 查询字典中是否有该键
barn = {"cow": 1, "dogs": 5, "cats": 3}
in 可以用来判断字典中是否有某个特定的键:
'chickens' in barn
'cows' in barn
keys 方法, values方法和items方法
barn.keys()
barn.values()
barn.items()