基础篇_008_dict字典
字典是处理数据的一种常见类型,我们一般也称之为:键值对,意思就是“一个key(键)对应一个value(值),这样一对形成一个字典元素”。形如:di = { key1: value1, key2: value2, ... ,},一对便是一个字典元素。
----字典中键和值的要求
1. 值(value):可以是数字、字符串、布尔值、字典、列表和元组,都能当值。
2. 键(key) :只能由数字、字符串、布尔值和元组来充当。细心的同学会发现,这里的类型都是不可被修改的,而且当在键的位置上用了列表或者字典类型时,Python会抛出一个异常——元素类型不能进行hash操作。对编程有一点程度了解的同学可能有接触过hash算法,什么是hash算法这个问题在现在不是很重要,只需了解:hash算法就是一种数据存储的方式,经过一定的数学运算高效的存取数据,所以就必须保证键的类型是不可以被修改的。
----字典的特点
1. 字典不能用while循环:因为字典是无序的。
2. 字典是无序的:因为字典是靠的hash算法,而hash的意思就是“一团糟”,所以字典没有必要有序,只需直接拿到对键进行相应数学运算之后的结果,然后获取值就行了。
3. 字典搜索值靠的是“键”:由于字典是无序的,所以就不存在索引了,就要使用字典中由用户自定义的“键”来获取相对应的值 ===》
di = { "name": "Simba Wang", "height": "Private", "hobby": "Computer Science"},那么想要获取我的姓名就可以用:di["name"]。
4. 支持for循环:既然可以通过“键”来获取“值”,那就理论上可以通过for循环来获取键值对。 ===》
1 di = {
2 123 : 33,
3 True : 123,
4 "qwe" : 999,
5 }
6 for item in di:
7 print(item, end=" ") # 输出的结果为:123 True qwe
但是没有想要的那一对。在Python中有3个函数可以实现获取“键”、“值”和键值对,在字典的方法中再介绍。
5. 字典支持删除操作:用关键字del di[key_del]。
----字典的方法
1. keys()、values()和items():分别获取“键”、“值”和键值对。===》
1 di = {
2 123 : 33,
3 True : 123,
4 "qwe" : 999
5 }
6 # key()方法获取字典中的“键”
7 for item in di.keys():
8 print(item, end=" ") # 输出结果为:123 True qwe
9 print("\n----------------")
10 # values()方法获取字典中的“值”
11 for item in di.values():
12 print(item, end=" ") # 输出结果为:33 123 999
13 print("\n----------------")
14 # 通过“键”来获取键值对
15 for item in di.keys():
16 print((str(item) + "\t:").expandtabs(5), di[item])
17 print("----------------")
18 # items()直接获取键值对:由于是键值对,所以要有2个变量接收
19 for key, value in di.items():
20 print(key, value)

2. fromkeys():dict类的静态方法,直接用dict.fromkeys(iterable, value)即可,不用创建一个dict对象。作用是:将第一个可迭代的参数的每一个元素作为“键”,将第二个参数作为“值”(默认为:None),然后生成一个字典类型的变量 ===》
v = dict.fromkeys("simba", 123)
print(v) # 输出结果为:{'s': 123, 'i': 123, 'm': 123, 'b': 123, 'a': 123}
v = dict.fromkeys("simba")
print(v) # 输出结果为:{'s': None, 'i': None, 'm': None, 'b': None, 'a': None}
3. get(keys, return_value = None):可能有同学会问:这个和直接用键取值没什么区别啊!对,当你输入的是正确的值话,是没什么不同;但是,如果输入的键不存在于这个字典当中,返回的结果就有很大的不同了。正所谓:幸福的家庭都是相似的,不幸的家庭各有各的不幸。===》
1 di = {"simba": "wang", 123: 234}
2 v_right_key = di["simba"]
3 v_right_get = di.get("simba")
4 print("v_right_key: ",v_right_key) # 输出:v_right_key: wang
5 print("v_right_get: ", v_right_get) # 输出:v_right_get: wang
6 # v_wrong_key = di["2"]
7 v_wrong_get_default = di.get("2")
8 # print("v_wrong_key: ",v_wrong_key) # 输出:抛出异常
9 print("v_wrong_get_default: ", v_wrong_get_default) # 输出:v_wrong_get_default: None
10 v_wrong_get_value = di.get(3, 22222)
11 print("v_wrong_get_value: ", v_wrong_get_value) # 输出:v_wrong_get_value: 22222
--所以这里建议以后用get()函数取值,这样避免抛出异常!
4. pop(key, return_value = None):弹出键值对并返回key对应的值,若键值对不存在则返回return_value(默认值为:None)
5. popitem():随机弹出一组键值对。
6. setdefault(key, value = None):设置键值对。当字典中存在key时,不设置,并返回对应的值;当字典中不存在key时,设置,并返回value(默认值为:None) ===》
di = {"simba": "wang", 123: 234}
v = di.setdefault("simba", 222)
print(di) # 输出:{'simba': 'wang', 123: 234}
print(v) # 返回的结果是:wang,
v = di.setdefault("k", 12)
print(di) # 输出:{'simba': 'wang', 123: 234, 'k': 12}
print(v) # 返回的结果为:12
7. update(dict):显而易见就是更新字典,有的覆盖,没有的添加。这个函数的参数还可以这样写:di.update(k1 = v1, k2 = v2),在这里面,Python会将参数和值构成一组字典。

浙公网安备 33010602011771号