Python字典以及方法的测试

字典:

字典属于一种新的数据结构,称为映射(mapping)

*字典的作用和列表相似,都是用来存储对象的容器

*列表的存储数据的性能很好,但是查询数据的性能很差

*在字典中每一个元素都有唯一的名字,通过这个唯一的名字可以快速的查找到指定的元素

*在查询元素时,字典的效率是非常快的

*在字典中可以保存多个对象,每个对象都有一个唯一对应的名字

这个唯一的名字,我们称为键(key),通过key可以 快速的查询value

这个对象我们称之为值(value)

所以字典,我们也称之为键值对结构

每个字典中可以有多个键值对,而每一个键值对我们称其为一项(item)

# 语法:
#     字典的值可以是任意对象
#     字典的键必须是不可变对象(为了能计算哈希)如int,str,bool,tuple....,我们一般使用str
#     字典的键是不可重复的,如果出现重复的后面的会替换掉原来的

# 根据需要通过键获取值

 

'''
@Project :pythonProject2 
@File    :dictionary_use.py
@IDE     :PyCharm 
@Author  :我心
Code content:字典的使用
@Date    :2021/8/30 19:03 
'''
# 创建字典 ,大括号可以跨行
d={'name':'白小纯','age':'18','sex':'男'}
# 语法:
#     字典的值可以是任意对象
#     字典的键必须是不可变对象(为了能计算哈希)如int,str,bool,tuple....,我们一般使用str
#     字典的键是不可重复的,如果出现重复的后面的会替换掉原来的

# 根据需要通过键获取值
# d[key] 返回 d 中以 key 为键的项。 如果映射中不存在 key 则会引发 KeyError。
print(d['name'])

# 使用dict()来获取字典
# 每一个参数就是一个键值对,参数名就是键,参数名就是值(这种方式创建的字典,key都是字符串)
d=dict(name='白小纯',age='18',sex='男')  # {'name': '白小纯', 'age': '18', 'sex': '男'}
print(d)
# 也可以将一个包含有双值子序列的序列转换为字典
# 双值子序列,序列中只有两个值[1,2] ('a',3) 'ab'
# 子序列,如果序列中的元素也是序列,那么我们就称这个元素为子序列
d=dict([('a',1),('b',2),['c',3]])  # {'a': 1, 'b': 2, 'c': 3}
print(d)


# len(d)
# 返回字典 d 中的项数。
print(len(d)) # 3

# list(d)
# 返回字典 d 中使用的所有键的列表。
a=list(d) # ['a', 'b', 'c']
print(a)

# d[key] = value
# 将 d[key] 设为 value。
d['a']='你好' # {'a': '你好', 'b': 2, 'c': 3}
print(d)

d['f']='李逍遥' # 如果对应的键不存在,则会进行添加操作
print(d) # {'a': '你好', 'b': 2, 'c': 3, 'f': '李逍遥'}

# del d[key]
# 将 d[key] 从 d 中移除。 如果映射中不存在 key 则会引发 KeyError。
del d['f']
print(d)

# key in d
# 如果 d 中存在键 key 则返回 True,否则返回 False。
print('a' in d) # True

# key not in d
# 等价于 not key in d。

# get(key[, default])
# 如果 key 存在于字典中则返回 key 的值,否则返回 default。 如果 default 未给出则默认为 None,因而此方法绝不会引发 KeyError。
# 多个参数类似于Java的optional类,避免空指针
print(d.get('f','不存在'))

# setdefault(key[, default])
# 如果字典存在键 key ,返回它的值。如果不存在,插入值为 default 的键 key ,并返回 default 。 default 默认为 None。
d.setdefault('f','徐长卿')
print(d)

# update([other])
# 使用来自 other 的键/值对更新字典,覆盖原有的键。 返回 None。
# update() 接受另一个字典对象,或者一个包含键/值对(以长度为二的元组或其他可迭代对象表示)的可迭代对象。
# 如果给出了关键字参数,则会以其所指定的键/值对更新字典: d.update(red=1, blue=2)。
# 新创建一个字典
d1=dict(e='重楼',k='李逍遥')
d.update(d1) # {'a': '你好', 'b': 2, 'c': 3, 'f': '徐长卿', 'e': '重楼', 'k': '李逍遥'}
print(d)

# popitem()
# 随机删除从字典中的一个键值对,一般都会删除最后一个键值对,删除之后,它会将删除的key-value作为返回值返回
# 返回的是一个元组,元组中有两个元素,第一个是删除的key,第二个是value
print(d.popitem()) #('k', '李逍遥')

# pop(key[, default])
# 如果 key 存在于字典中则将其移除并返回其值,否则返回 default。
# 如果 default 未给出且 key 不存在于字典中,则会引发 KeyError。
result=d.pop('a', '不存在')
print(result) #你好

# clear()
# 移除字典中的所有元素。

# copy()¶
# 返回原字典的浅拷贝。返回一个平面副本
print(d.copy())

# 关于浅拷贝
d_copy = d.copy()
# 对比两个字典的内容,相同
print(d)
print(d_copy)
# 对比两个字典的地址,发现不相同
print(f'd字典的地址:{id(d)}')
print(f'd_copy字典的地址:{id(d_copy)}')
# 关于平面拷贝,我们可以测试
t={'name':{'age':19},'a':1} # 创建了一个包含了字典的字典
t_copy = t.copy()
# 对比内容,相同
print(t)
print(t_copy)
# 但是,当我们修改第二层字典时
t['name']['age']='你好'
# 输出内容,t和t_copy的第二层字典的值同时被修改了,
# 也就是说,两个字典的'name'对应的值都指向了同一个对象
print(t)
print(t_copy)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孔雀南飞梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值