字典几乎可以存储任意类型对象。
列表的索引必须是整数,而字典的索引几乎可以是任何值。
字典可以看作是键(索引)的集合与值的集合的一种映射。每个键对应一个值,键与值之间的关系称为键值对(或者数据项)。
创建字典
字典内容使用大括号{}
包起来,如下:
>>> age = {'zhao':24, 'qian':33, 'sun': 42 }
>>> age
{'zhao': 24, 'qian': 33, 'sun': 42}
我们创建了一个字典,并将其赋值给变量age
。字典age
中有三个键值对:
键值对 | 键 | 值 |
---|---|---|
'zhao':24 | 'zhao' | 24 |
'qian':33 | 'qian' | 33 |
'sun':42 | 'sun' | 42 |
可以看到,在字典中,每个键值对使用逗号,
分隔;键值对中使用键:值
的格式。
当多次打印同一个字典,键值对出现的顺序并不一样:
>>> age
{'qian': 33, 'sun': 42, 'zhao': 24}
>>> age
{'sun': 42, 'zhao': 24, 'qian': 33}
这是因为字典不会保存键值对的顺序。
使用dict()
可以创建一个空字典:
>>> dict()
{}
字典中键值对中的值的可变的,但是键是不可变的。字典中键值对中的键需要满足下面的条件:
- 不允许同一个键出现两次。
- 键不可变,可以用数字、字符串或者元组充当,列表则不行。
访问字典
访问字典非常容易,使用索引就可以:
>>> age
{'zhao': 24, 'qian': 33, 'sun': 42}
>>> age['zhao']
24
>>> age['sun']
42
>>> age[1]
Traceback (most recent call last):
File "", line 1, in
KeyError: 1
如果输入字典中没有的键,会给出错误。
遍历字典
直接使用变量遍历字典,其实是在遍历字典的键序列:
>>> age
{'zhao': 24, 'qian': 33, 'sun': 42}
>>> for name in age:
... print (name + str(age[name]))
...
zhao24
qian33
sun42
例子中,name
每次循环都保存一个字典age
的键,之后通过age[name]
的方式取得其对应的值。需要注意的是,字典并不保存顺序,所以每次输出的顺序可能不一致。
使用Dict.keys()
获取字典的键列表,使用Dict.values()
获取字典的值列表:
>>> age
{'zhao': 24, 'qian': 33, 'sun': 42}
>>> age.keys() # 将age的键作为列表返回
dict_keys(['zhao', 'qian', 'sun'])
>>> age.values() # 将age的值作为列表返回
dict_values([24, 33, 42])
使用Dict.items()
将字典作为列表返回,字典中的键值对以元组的形式保存在列表中:
>>> age
{'zhao': 24, 'qian': 33, 'sun': 42}
>>> age.items()
dict_items([('zhao', 24), ('qian', 33), ('sun', 42)])
这样,就可以使用多变量赋值的方法来遍历字典:
>>> age
{'zhao': 24, 'qian': 33, 'sun': 42}
>>> for name,agee in age.items():
... print ("NAME: %s, AGE: %d." % (name,agee))
...
NAME: zhao, AGE: 24.
NAME: qian, AGE: 33.
NAME: sun, AGE: 42.
上面的例子中,字典中的每个键值对都作为元组被赋值到变量元组(name,agee)
中。
修改字典
为字典添加一个新的键值对:
>>> age
{'zhao': 24, 'qian': 33, 'sun': 42}
>>> age['li'] = 73
>>> age
{'zhao': 24, 'qian': 33, 'sun': 42, 'li': 73}
上例中为字典age
添加了键值对'li':73
。
如果字典中已有指定的键,则为更新操作:
>>> age
{'zhao': 24, 'qian': 33, 'sun': 42, 'li': 73}
>>> age['li'] = 77
>>> age
{'zhao': 24, 'qian': 33, 'sun': 42, 'li': 77}
使用del
语句删除字典中的值:
>>> del age['li']
或者删除字典:
>>> del age