Python学习之字典

字典的常见用法

'''  字典正确使用方法  '''
# 创建空字典
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的内存地址,它们指向的是同一个东西。再来一个内存地址图更容易懂

Image

使用函数 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函数是开辟空间拷贝的值。

Image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值