字典的常见用法
''' 字典正确使用方法 '''
# 创建空字典
dict0 = {}
# 创建非空字典
dict1 = {'name':'Jane', 'age':26, 'sex':'female'}
# 新增键值对
dict1['address'] = '深圳市南山区义学街四坊五号'
# 修改键值对 # 同一个键不允许出现两次,后一个值会被记住,覆盖前一个值
dict1['name'] = 'Smith'
# 删除键'name'
del dict1['name']
# 清空字典
dict1.clear()
# 删除字典
del dict1
''' 字典错误使用方法 '''
# 键使用列表 # ['name']为列表,字典中不能使用列表作为键,可以使用“字符串、数字、元组”作为键
dict2 = {['name']:'Jane', 'age':26, 'sex':'female'}
''' 字典内置函数及方法 '''
# len(dict) 获取字典长度,一个键值对表示一个长度
print(len(dict1)) # 打印结果:4
# str(dict1) 将字典转化为字符串表示
print(str(dict1)) # 打印结果:{'name': 'Smith', 'age': 26, 'sex': 'female', 'address': '深圳市南山区义学街四坊五号'}
# type(dict) 返回变量类型
print(type(dict1)) # 打印结果:<class 'dict'>
# dict.copy() 浅复制字典 # 开辟一块内存空间,将值拷贝进去,二者id地址不同
dict1_copy = dict1.copy()
print('id(d):', id(dict1_copy)) # 打印结果:2589300137088
print(id(dict1)) # 打印结果:2589300283904
# dict.fromkeys(seq[, value]) # 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值。
# seq:字典键值列表(即指字典变量)
# value:可选参数,设置键序列(seq)对应的值,默认为None。
# 返回一个新的字典
newDict = dict.fromkeys(dict1) # 打印结果:{'name': None, 'age': None, 'sex': None, 'address': None}
dict.fromkeys(dict1, 10) # 打印结果:{'name': 10, 'age': 10, 'sex': 10, 'address': 10}
# dict1.get(key, default=None) 返回指定的键值
dict1.get('age')
# key in dict 判断键在字典里则返回true,不在则返回false
if 'name' in dict1:
print('yes')
else:
print('no')
# dict1.items() 以列表返回一个视图对象
dict2 = dict1.items() # 打印结果:dict_items([('name', 'Smith'), ('age', 26), ('sex', 'female'), ('address', '深圳市南山区义学街四坊五号')])
# dict1.keys() 返回键集合的视图对象
dict3 = dict1.keys() # 打印结果:dict_keys(['name', 'age', 'sex', 'address'])
# d.update(d2) 把字典d2的键/值对更新到d里
d = {'Name': 'Runoob', 'Age': 7}
d2 = {'Sex': 'female' }
d.update(d2) # 打印结果:{'Name': 'Runoob', 'Age': 7, 'Sex': 'female'}
# dict1.values() 返回字典所有值的集合列表
DValue = dict1.values() # 打印结果:dict_values(['Smith', 26, 'female', '深圳市南山区义学街四坊五号'])
# pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key:要删除的值。default:如果没有key,返回default值
deleteKey = dict1.pop('name', 'not find') # 打印结果:Smith
# popitem() 随机返回并删除字典中的最后一对键和值
dleteLast = dict1.popitem() # 打印结果:('address', '深圳市南山区义学街四坊五号')
print(dleteLast)
Python字典复制(浅拷贝and深拷贝)
先创建一个字典并初始化数据
d = {'age':25, 'name':'song'}
使用赋值法进行复制——深拷贝
d1 = d
疑问:Python中这种赋值方法复制的d1,是地址引用呢还是开辟一块内存空间进行值拷贝?
解析:想知道是引用同一块内存地址还是另开辟一块内存空间拷贝数据,可以先通过代码看变量的地址id是不是一样的。
d = {'age':25, 'name':'song'}
d1 = d
d1['age'] = 21
print('id(d): ', id(d))
print('id(d1): ', id(d1))
print('d['age']: ', d['age'])
print('d1['age']: ', d['age'])
打印结果:
id(d): 1768306039104
id(d1):1768306039104
d['age']:21
d1['age']:21
这说明d1与d都是指向同一块内存地址,d1引用了d的内存地址,它们指向的是同一个东西。再来一个内存地址图更容易懂
使用函数 copy()进行复制——浅拷贝
copy()方法则是浅复制,代码实例:
d = {'age':25, 'name':'song'}
d1 = d.copy()
d1['age'] = 21
print('id(d): ', id(d))
print('id(d1): ', id(d1))
print('d['age']: ', d['age'])
print('d1['age']: ', d['age'])
执行后打印结果:
id(d): 1768306039104
id(d1):1768305896320
d['age']:25
d1['age']:21
d与d1的内存地址不同,d1修改了age,而d的age值仍未变,说明copy函数是开辟空间拷贝的值。