python学习笔记-字典
程序员文章站
2024-01-05 12:56:46
·字典(dict) 笔记: 字典(映射)成对出现,由键及其相应的值组成,键-值对称作项(item),字典是python中唯一内置映射类型。字典中的键必须是独一无二的。 在python 2中进行拷贝需要调用copy模块;而在python 3 中可以直接使用浅拷贝copy(),当使用深拷贝deepcop ......
·字典(dict)
笔记:
- 字典(映射)成对出现,由键及其相应的值组成,键-值对称作项(item),字典是python中唯一内置映射类型。字典中的键必须是独一无二的。
- 在python 2中进行拷贝需要调用copy模块;而在python 3 中可以直接使用浅拷贝copy(),当使用深拷贝deepcopy(),则需要调用copy模块。
- 相比于检查列表是否包含指定的值,检查字典是否包含指定的键效率更高。
@ 创建一个字典
使用键-值对序列创建字典(键-值在元组中组成列表):
>>> item = [('name','jimmy'),('age','25'),('address','fujian')] >>> x = dict(item) >>> print(x) {'name': 'jimmy', 'age': '25', 'address': 'fujian'}
使用关键字创建字典:
>>> d = dict(name='jimmy',age=25) >>> print(d) {'name': 'jimmy', 'age': 25}
@ 字典的基本操作
字典的基本操作与序列类似:
>>> x ={'name':'jimmy','age':'25','address':'fujian'} >>> print(len(x)) #len():查询字典键-值对数 3 >>> print(x['name']) #x['']:查询name键的值 jimmy >>> x['address'] = 'beijing' #x['']='value':替换address键对应的值 >>> print(x) {'name': 'jimmy', 'age': '25', 'address': 'beijing'} >>> del x['address'] #del x['']:删除字典中键为address的项 >>> print(x) {'name': 'jimmy', 'age': '25'} #检查字典中是否包含键为name的项(成员资格) >>> print('name' in x) true
@ 字典的方法
fromkeys():创建一个新字典,其中包含指定的键,值默认为none
>>> x = dict.fromkeys([x for x in range(1,11)]) #创建10个项(键-值对) >>> print(x) {1: none, 2: none, 3: none, 4: none, 5: none, 6: none, 7: none, 8: none, 9: none, 10: none}
浅拷贝(copy):
>>> x ={'name':'jimmy','age':'25','address':['fujian','beijing']} >>> y = x.copy() >>> print("x的id为:",id(x)) x的id为: 2394409585904 >>> print("y的id为:",id(y)) y的id为: 2394409586120 >>> y['age'] = 20 >>> print(x) {'name': 'jimmy', 'age': '25', 'address': ['fujian', 'beijing']} >>> print(y) {'name': 'jimmy', 'age': 20, 'address': ['fujian', 'beijing']}
#结论:x和y指向的内存地址不同,所以两个字典的值不会相互影响 >>> x['address'].remove('beijing') >>> print(x) {'name': 'jimmy', 'age': '25', 'address': ['fujian']} >>> print(y) {'name': 'jimmy', 'age': 20, 'address': ['fujian']}
#结论:删除x字典的beijing时,y字典的值也随着删除。
这是因为浅拷贝只复制了第一层数据,字典里存储的子列表,打印出来是子列表,
在内存里,字典里只是存储了子列表的内存地址,子列表在内存里是单独存储的。
深拷贝(deepcopy):需要导入copy模块
>>>from copy import deepcopy #导入模块 >>> x ={'name':'jimmy','age':'25','address':['fujian','beijing']} >>> y = deepcopy() >>> print("x的id为:",id(x)) x的id为: 2394409585904 >>> print("y的id为:",id(y)) y的id为: 2394409586120 >>> y['age'] = 20 >>> print(x) {'name': 'jimmy', 'age': '25', 'address': ['fujian', 'beijing']} >>> print(y) {'name': 'jimmy', 'age': 20, 'address': ['fujian', 'beijing']} #结论:x和y指向的内存地址不同,所以两个字典的值不会相互影响 >>> x['address'].remove('beijing') >>> print(x) {'name': 'jimmy', 'age': '25', 'address': ['fujian']} >>> print(y) {'name': 'jimmy', 'age': 20, 'address': ['fujian', 'beijing']} #结论:删除x字典的beijing时,y字典的值不会被删除。这是因为深复制把子列表也复制了一份
方法集合详解:
>>> x = {'name':'jimmy','age':'18','address':'fujian','phone':'123456'} >>> y = {'age':'100'} >>> print(x.get('name','not found it'))
jimmy #get():查找x字典中name键的值,返回其键的值。它还提供默认值;x中没有name时,返回指定值not found it(没有指定则默认为none)
>>> print(x.setdefault('favorire','apple'))
apple #setdefault():查找x字典中favorite键的值,返回其键的值;如果没有找到键,将在字典中添加一个键-值对(如果没有指定则默认为none)
>>> print(x) {'name': 'jimmy', 'age': '18', 'address': 'fujian', 'phone': '123456', 'favorire': 'apple'} >>> print("item()方法:",x.items()) #items():返回所有字典项(键值对)的列表 item()方法: dict_items([('name', 'jimmy'), ('age', '18'), ('address', 'fujian'), ('phone', '123456'), ('favorire', 'apple')]) >>> print("keys()方法:",x.keys()) #keys():返回字典中的键 keys()方法: dict_keys(['name', 'age', 'address', 'phone', 'favorire']) >>> print("values()方法:",x.values()) #values():返回字典中的值 values()方法: dict_values(['jimmy', '18', 'fujian', '123456', 'apple']) >>> print("pop()方法:",x.pop('name')) #pop(): 获取指定键相关联的值,并将该键-值对从字典中删除。 pop()方法: jimmy >>> print(x) {'age': '18', 'address': 'fujian', 'phone': '123456', 'favorire': 'apple'} >>> print("popitem()方法:",x.popitem()) #popitem():随机弹出一个项键值对(字典无序) popitem()方法: ('favorire', 'apple') >>> print(x) {'age': '18', 'address': 'fujian', 'phone': '123456'} >>> print("update()方法:",x.update(y)) #update():使用一个字典来更新另一个字典,如果字典中没有,将添加一个项 update()方法: none >>> print(x) {'age': '100', 'address': 'fujian', 'phone': '123456'} >>> print("clear()方法:",x.clear()) #删除所有字典项 clear()方法: none >>> print(x) {}
@ 浅拷贝应用:
假设tom和jimmy分别持有信用卡主卡和副卡,共享额度10000,两个人都可以使用信用卡消费。
>>> creditcard = ['name',['saving',10000]] >>> tom = creditcard.copy() >>> jimmy = creditcard.copy() >>> tom[0] = 'tom' >>> jimmy[0] = 'jimmy' >>> tom[1][1] = 5000 #假设tom消费5000元 >>> print('信用卡余额:',creditcard) 信用卡余额: ['name', ['saving', 5000]] >>> print('tom的剩余额度',tom) tom的剩余额度 ['tom', ['saving', 5000]] >>> print('jimmy剩余额度',jimmy) jimmy剩余额度 ['jimmy', ['saving', 5000]]
end~