Python 内置类型之字典类型详解
1. 字典的概念
字典是一种通过名字或者关键字引用的得数据结构, 其键可以是数字, 字符串, 元组, 这种结构类型也称之为映射. 字典类型是 Python 中唯一內建的映射类型. 字典是另一种可变容器模型, 且可存储任意类型对象.(鉴于字典可存储的信息量几乎不受限制, 因此会教给大家如何遍历字典中的数据. 另外, 你还将学 习存储字典的列表, 存储列表的字典和存储字典的字典.)
如图, 键对映了值, 只要查询键, 就知道里面有什么值了.
2.Python 中字典的创建
字典的每个键值 key=>value 对用冒号 : 分割, 每个键值对之间用逗号 , 分割, 整个字典包括在花括号 {} 中. 键一般是唯一的, 如果重复最后的一个键值对会替换前面的, 值不需要唯一. 值可以取任何数据类型, 但键必须是不可变的! 如字符串, 数字或元组.
- # 格式为
- d = {key1 : value1, key2 : value2 }
- dict1 = { 'abc': 456 }
- dict = {}# 创建空字典
- dict = {'a': 1, 'b': 2, 'b': '3'}
- print(dict['b'])
- >>>'3'
- print(dict)
- >>>dict{'a': 1, 'b': '3'}
3. 字典的增删改查
1. 查 (查询键就可以查到值)
- alien_0 = {'color': 'green', 'points': 5}
- print(alien_0['color'])
- >>>green
注意: 如果用字典里没有的键访问数据, 会输出错误
2. 增 (向字典添加新内容的方法是增加新的键 / 值对)
- alien_0 = {'color': 'green', 'points': 5}
- print(alien_0)
- alien_0['x_position'] = 0
- alien_0['y_position'] = 25
- print(alien_0)
- >>>
- {'color': 'green', 'points': 5}
- {'color': 'green', 'points': 5, 'y_position': 25, 'x_position': 0}
3. 删 (能删单一的元素也能清空字典, 对于字典中不再需要的信息, 可使用 del 语句将相应的键 - 值对彻底删除. 使用 del 语句时, 必须指定字典名和要删除的键. )
- alien_0 = {'color': 'green', 'points': 5}
- print(alien_0)
- del alien_0['points']
- print(alien_0)
- >>>
- {'color': 'green', 'points': 5}
- {'color': 'green'}
注意: 字典键值对使用 del 删除后会永远消失
4. 改 (要修改字典中的值, 可依次指定字典名, 用方括号括起的键以及与该键相关联的新值)
- alien_0 = {'color': 'green'}
- print(alien_0['color'])
- >>>
- green
- alien_0['color'] = 'yellow'
- print(alien_0['color'])
- >>>
- yellow
4. 字典里需要注意的问题
1. 值可以没有限制地取任何 python 对象, 既可以是标准的对象, 也可以是用户定义的, 但键不行.
2. 不允许同一个键出现两次. 创建时如果同一个键被赋值两次, 后一个值会被记住
3. 键必须不可变, 所以可以用数字, 字符串或元组充当, 所以用列表就不行, 会报错
5. 字典里的内置函数和方法
Python 字典包含了以下内置函数:
序号 | 函数及描述 |
---|---|
1 | cmp(dict1, dict2) http://www.runoob.com/python/att-dictionary-cmp.html
|
2 | len(dict) http://www.runoob.com/python/att-dictionary-len.html
|
3 | str(dict) http://www.runoob.com/python/att-dictionary-str.html
|
4 | type(variable) http://www.runoob.com/python/att-dictionary-type.html
|
Python 字典包含了以下内置方法:
6. 字典可以有很多应用
1. 强大的字典嵌套
有时候, 需要将一系列字典存储在列表中, 或将列表作为值存储在字典中, 这称为嵌套. 你 可以在列表中嵌套字典, 在字典中嵌套列表甚至在字典中嵌套字典.
1. 列表里嵌套字典 (假设有一堆外星人, 字典 alien_0 包含一个外星人的各种信息, 但无法存储第二个外星人的信息, 更别说屏幕上全部的外星人的信息了. 如何管理成群结队的外星人呢? 一种办法是创建一个外星人列表, 其中每个外星人都是一个字典, 包含有关该外星人的各种信息.)
- alien_0 = {'color': 'green', 'points': 5} alien_1 = {'color': 'yellow', 'points': 10} alien_2 = {'color': 'red', 'points': 15}
- aliens = [alien_0, alien_1, alien_2]
- for alien in aliens:
- print(alien)
- >>>
- {'color': 'green', 'points': 5} {'color': 'yellow', 'points': 10} {'color': 'red', 'points': 15
2. 字典中嵌套列表 (博主姓名为 cdx, 字典里的博主的爱好, like 键对映了小动物列表, 这样就能输出博主所有喜欢的小动物了)
- cdx = {'name': 'redmolly', 'like': ['cat', 'dog']}
- for liking in cdx['like']:
- print("\t" + topping)
- >>>cat dog
注意: 列表和字典的嵌套层级不应太多. 如果嵌套层级比前面的示例多得多, 很可能有更简单 的解决问题的方案.
3. 字典嵌套字典 (字典中嵌套字典, 如果有多个用户, 每个都有用户名, 可在字典中将用户名作为键, 然后将每位用户的信息存储在一个字典中, 并将该字典作为与用户名相关联的值.)
- users = {'cat':{'voice': 'miaomiao','like':'fish'},
- 'dog':{'voice': 'wangwang', ''like': 'meat'}}
- for username, user_info in users.items():
- print("\nUsername:" + username)
- likeing =user_info['like']
- print("\tlikeing:" + likeing.title())
- >>>
- Username:cat
- likeing: fish
- Username:dog
- likeing: meat
- PS(字典里的操作还有很多, 也有一些高级用法, 在之后博主也会不断的更新的.)
来源: http://www.bubuko.com/infodetail-2742809.html