字典
创建字典
字典由一组键(key)值(value)对组成的,类似于:
{key1: value1, key2: value2}
这样一种形式。
字典的每个键值(key=>value)对用冒号 : 分割。
每个对之间用逗号 , 分割。
整个字典包括在花括号 {} 中。
dict1 = {'name': 'jeffrey', 'age': 2}
print(dict1)
print(type(dict1))
结果如下:
{'name': 'jeffrey', 'age': 2}
<class 'dict'>
注意: 键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。键只能为字符串类型,并且创建的时候字符串不能加引号,加上就会直接报语法错误。
访问字典中的值
print(dict1[‘name’])
print(dict1['name'])
geekdigging
如果我们查找的键在字典中不存在,会直接报错。如果要避免以上问题,需要先查找当前键是否存在,可以使用以下语句:
语法: 键 in 字典
str = 'jeffrey'
if str in dict1:
print(dict1['jeffrey'])
else:
print('您查询的键', str, '不存在')
您查询的键 jeffrey 不存在
添加、删除、更新 字典中的键值对:
# 添加
dict1['a'] = 18
print(dict1)
# 更新
dict1['name'] = 'www.jeffrey.com'
print(dict1)
# 删除
del dict1['a']
print(dict1)
{'name': 'jeffrey', 'age': 2, 'a': 18}
{'name': 'www.jeffrey.com', 'age': 2, 'a': 18}
{'name': 'www.jeffrey.com', 'age': 2}
字典内置函数 & 方法
dict.keys()
作用: 返回一个迭代器,可以使用 list() 来转换为列表,该列表包含所有的 key。
dict1 = {'name': 'jeffrey', 'age': 2}
print(dict1.keys())
print(list(dict1.keys()))
print(type(list(dict1.keys())))
dict_keys(['name', 'age'])
['name', 'age']
<class 'list'>
dict.values()
作用: 返回一个迭代器,可以使用 list() 来转换为列表,该列表包含所有的 value 。
print(dict1.values())
print(list(dict1.values()))
print(type(list(dict1.values())))
dict_values(['geekdigging', 2])
['geekdigging', 2]
<class 'list'>
dict.items()
作用: 以列表返回可遍历的(键, 值) 元组数组。
print(dict1.items())
print(list(dict1.items()))
print(type(list(dict1.items())))
dict_items([('name', 'geekdigging'), ('age', 2)])
[('name', 'geekdigging'), ('age', 2)]
<class 'list'>
dict.get(key, default=None)
作用: 返回指定键的值,如果值不在字典中返回 default(None) 值。
print(dict1.get('name'))
print(dict1.get('geekdigging'))
geekdigging
None
因为 geekdigging 并不是字典中的 key ,所以返回了默认值 None 。
dict.pop(key[,default])
作用: 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。
print(dict1.pop('age'))
print(dict1)
2
{'name': 'geekdigging'}
dict.setdefault(key, default=None)
作用: 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为 default 。
dict1.setdefault('age')
print(dict1)
{'name': 'geekdigging', 'age': None}
dict.update(dict2)
作用: 把字典 dict2 的键/值对更新到 dict 里。
dict2 = {'sex': 'male'}
dict1.update(dict2)
print(dict1)
{'name': 'geekdigging', 'age': None, 'sex': 'male'}
dict.clear()
作用: 删除字典内所有元素。
注意: 删除字典内所有元素,并非删除字典。
dict2.clear()
print(dict2)
结果如下:
{}
dict.copy()
作用: 返回一个字典的浅复制。
注意: 这里的 copy 是浅 copy ,有编程经验的同学估计理解起来并无难度。无经验的同学且听我慢慢道来,浅拷贝本质上拷贝的是一个引用,并非拷贝了整个内容,举例子的话就好比我有一个苹果,并且浅拷贝了一个给小明,我咬了一口我的苹果,但是小明发现他的苹果也被咬了一口。
dict3 = {'name': 'geekdigging', 'age': [1, 2, 3]}
# 浅拷贝: 引用对象
dict4 = dict3
print(id(dict3))
print(id(dict4))
# 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
dict5 = dict3.copy()
dict3['age'].remove(1)
print(dict3)
print(dict5)
print(id(dict3))
print(id(dict5))
2418990911064
2418990911064
{'name': 'geekdigging', 'age': [2, 3]}
{'name': 'geekdigging', 'age': [2, 3]}
2418990911064
2418991599688
如果我想全都深 copy ,怎么做呢?
可以引入 copy 模块实现。
import copy
dict3 = {'name': 'geekdigging', 'age': [1, 2, 3]}
dict6 = copy.deepcopy(dict3)
dict3['age'].remove(1)
print(dict3)
print(dict6)
print(id(dict3))
print(id(dict6))
{'name': 'geekdigging', 'age': [2, 3]}
{'name': 'geekdigging', 'age': [1, 2, 3]}
2418991602168
2418991602008