python基础:Python常用数据类型操作-字典

字典的定义

# 概念
# 	无序的, 可变的键值对集合
# 定义
# 	方式1
# 		{key: value, key: value...}
# 		例如
# 			{"name": "sz", "age": 18}
# 	方式2
# 		fromkeys(S, v=None)
# 			静态方法
# 				类和对象都可以调用
# 			类调用
# 				dict.fromkeys("abc", 666)
# 					{'a': 666, 'c': 666, 'b': 666}
# 				此处的dict, 是指字典类型
# 			对象调用
# 				dic.fromkeys("abc", 666)
# 					{'a': 666, 'c': 666, 'b': 666}
# 				此处的dic, 是实例化的字典对象
# 	注意
# 		key不能重复
# 			如果重复
# 			后值会把前值覆盖
# 		key必须是任意不可变类型
# 			例如
# 				可变
# 					列表
# 					字典
# 					可变集合
# 					...
# 				不可变
# 					数值
# 					布尔
# 					字符串
# 					元组
# 					...
# 		原因
# 			Python的字典, 采用哈希(hash)的方式实现
# 			简单存储过程
# 				初始化一个表格, 用来存放所有的值
# 					这个表格称之为"哈希表"
# 					暂且可理解为我们所学的 "列表"
# 				在存储一个键值对的时候, 会作如下操作
# 					根据给定的key, 通过某些操作, 得到一个在"哈希表"中的索引位置
# 						把key通过 "哈希函数" 转换成一个整型数字
# 							称为 "哈希值"
# 						将该数字对数组长度进行取余,取余结果就当作数组的下标
# 						如果产生了"哈希冲突"
# 							比如, 两个不同的key, 计算出来的索引, 是同一个
# 							则采用"开发寻址法"
# 								通过探测函数查找下一个空位
# 					根据索引位置, 存储给定的"值"
# 			简单查找过程
# 				再次使用哈希函数将key转换为对应的列表的索引,并定位到列表的位置获取value
# 存在意义
# 	可以通过key, 访问对应的值, 使得这种访问更具意义
# 		person["name"]
# 		表述的是获取一个人的姓名
# 	查询效率得到很大提升
# 		可想象"汉字字典"的使用方式
# 			直接根据指定的key找到对应的页码, 从而找到这个汉字
# 			不需要一页一页的翻着找

# person = {"name": "sz", "age": 18}
# print(person, type(person))
# print(person["name"])
# print(person["age"])

# d = dict.fromkeys("abc", 666)
# print(d)

# d = {1: "a", 2: "b", 1: "c"}
# print(d)

# d = {"a": "123"}
# d = {(1, 2): "12"}
# d = {[1, 2, 3]: "123"} #TypeError: unhashable type: 'list'
# print(d)

# num = 10
# print(id(num))

字典的常用操作:增删改

# ---------------------------字典的常用操作----------------------
# 常用操作
# 增
# dic[key] = value
# 当key在原字典中不存在时, 即为新增操作

# d = {"name": "sz", "age":18}
# print(d, type(d), id(d))
# d["height"] = 180
# print(d, type(d), id(d))


# 删
# del dic[key]
# key, 必须要存在

# d = {"name": "sz", "age": 18}
# del d["age"]
# print(d)


# dic.pop(key[, default])
# 删除指定的键值对, 并返回对应的值
# 如果key, 不存在, 那么直接返回给定的default值;
# 不作删除动作
# 如果没有给定默认值, 则报错

# v = d.pop("age")
# print(v, d)
# v = d.pop("age1", 666)
# print(v, d)


# dic.popitem()
# 删除按升序排序后的第一个键值对, 并以元组的形式返回该键值对
# 如果字典为空, 则报错

# d = {"name": "sz", "age": 18}
# result = d.popitem()
# print(result, d)


# dic.clear()
# 删除字典内所有键值对
# 返回None
# 注意, 字典对象本身还存在, 只不过内容被清空
# 注意和del的区别
# d = {"name": "sz", "age": 18}
# print(d.clear())
# print(d)


# 改
# 只能改值, 不能改key
# 修改单个键值对
# dic[key] = value
# 直接设置, 如果key不存在, 则新增, 存在则修改
# d = {"name": "sz", "age": 18}
# print(d)
# d["age"] = 20
# print(d)
# d["age1"] = 20
# print(d)


# 批量修改键值对
# oldDic.update(newDic)
# 根据新的字典, 批量更新旧字典中的键值对
# 如果旧字典没有对应的key, 则新增键值对
# d = {"name": "sz", "age": 18}
# d.update({"age": 666, "address": "上海"})
# print(d)

获取单个值

# -------------------------------------获取单个值---------------------------------------------
# 方式1
# dic[key]
# 如果key, 不存在, 会报错

# d = {"name": "sz", "age": 18}
# print(d["age"])




# 方式2
# dic.get(key[, default])
# 如果不存在对应的key, 则取给定的默认值default
# 如果没有默认值, 则为None
# 但不会报错
# 但是, 原字典不会新增这个键值对
# d = {"name": "sz", "age": 18}
# v = d.get("age")
# print(v)
# v = d.get("age1")
# print(v)
# v = d.get("age2", 666)
# print(v)



# 方式3
# dic.setdefault(key[, default])
# 获取指定key对应的值
# 如果key不存在, 则设置给定默认值, 并返回该值
# 如果默认值没给定
# 则使用None代替
# 与方式2的区别  如果 字典中不存在键值对,则会在字典中新增键值对
d = {"name": "sz", "age": 18}
v = d.setdefault("age1")
print(v, d)

获取所有值,遍历,计算,判定


# 获取所有的值
# dic.values()
# d = {"name": "sz", "age": 18}
# print(d.values())



# 获取所有的键
# d.keys()
# print(d.keys())


# 获取字典的键值对
# dic.items()
# print(d.items())



# 遍历
# for in
#     for x, y in info.items()
# 先遍历所有的key,然后根据指定的key获取所对应的值
d = {"name": "sz", "age": 18, "address": "shanghai"}
# # 1.获取所有的key
# keys = d.keys()
# # 遍历所有的key
# for key in keys:
#     print(key)
#     print(d[key])


# 获取所有键值对
# kvs = d.items()
# print(kvs)
#
# # 直接便利
# for k, v in kvs:
#     print(k, v)




# 计算
# len(info)
# 键值对的个数
# print(len(d))



# 判定
# x in dic
# 判定dic中的key, 是否存在x
print("name" in d)


# x not in dic
# 判定dic中的key, 是否不存在x

# dic.has_key(key)
# 已过期, 建议使用in来代替

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值