在上一篇文章 Python札记6_字典1
中主要讨论了字典的创建、访问以及如何利用字典进行格式化输出,本文中主要讲解字典的各种方法。
copy:浅拷贝
copy就是复制,但是在Python中复制并不是那么地简单。对象有类型,变量无类型。变量其实就是一个标签,使用id()查询对象在内存中位置。
ab = {'python': 'language', 'city': 'shenzhen', 'code': '101'}
cd = ab
ef = ab.copy()
print(id(ab))
print(id(cd))
print(id(ef))
2846288332768
2846288332768
2846287021040
deepcopy:深拷贝
要理解深拷贝需要导入copy模块来实现
import copy
x = {'language': ['python', 'html'], 'city': 'shenzhen'}
y = copy.deepcopy(x)
print(id(x))
print(id(y))
2524451325920
2524451324120
x['language'].remove('html')
print(x)
print(y)
{'language': ['python'], 'city': 'shenzhen'}
{'language': ['python', 'html'], 'city': 'shenzhen'}
结论:通过深拷贝,得到是两个不同的对象,内存地址不同,改变其中一个不会影响另一个。
函数作用
clear清空字典中元素,属于原地修改,无返回值dict.clear()只是变成了空字典,内存中仍然存在;del 方法是全部删除,内存就没有了
get获取某个键key的值value:dict.get(k, [,d])键不存在返回指定的值d
setdefault类似get方法,如果键不存在,返回指定的值,并在字典中增加这个键值对;如果不指定返回值,默认是None
ab = {'language': 'python', 'city': 'shenzhen', 'code': '101'}
print(ab.get("language"))
print(ab['language'])
print(ab.get('number'))
print(ab.get('number', '1234'))
print(ab.setdefault('number', '1234'))
{'language': 'python', 'city': 'shenzhen', 'code': '101', 'number': '1234'}
关于dict['key']、get()、setdefault()
方法的总结:
- 若键存在,三者作用效果相同
- 若键不存在,通过
dict['key']
访问报错,另外两种不报错,返回的是None - 对于
get()
和setdefault()
,如果指定了返回值,则返回该值,不指定返回值为None; - 上条结论的基础上,
get()
不改变原来的字典;setdefault()
执行之后会增加键值对。
关于键值对、键、值的获取主要用到的是items()、keys()、values()
三种方法,三种方法得到的结果都能够用for
进行遍历,获取单个元素:
函数作用
items获取键值对
keys获取所有的键
values获取所有的值
dic = {'language':'python', 'city': 'shenzhen'}
print(dic.items())
print(type(dic.items()))
for key, value in dic.items():
print(key, value)
print(dic.keys())
for value in dic.values():
print(value)
image.png
若想得到字典中的键或者值,有两种方法:
- 通过
items()
进行获取 - 通过
keys()
或者values()
直接获取