python从入门到就业-数据类型-字典

概念

无序的,可变的键值对集合
键也可以是整型数

定义

只能通过key获取对应的值
#方式一
person = {
    "name" : "lyw", 
     "age"  : 18
}
print(person)  #{'name': 'lyw', 'age': 18}
print(person["name"]) #lyw
静态方法:类和对象都可以调用,他不需要实例化 直接调用就可以
#d = dict.fromkeys(seq, value) 
#seq必须是有序的集合 字典无顺序!
#把seq元素分解,每一个当作一个key value是初始化的值,默认为None
d = dict.fromkeys("abc")
print(d) #{'a': None, 'b': None, 'c': None}
1. key不能重复,重复的话,后值会把前值给覆盖掉
2. key必须是任意不可变类型
可变 :list、字典、可变集合
不可变 :数值、布尔、字符串、元组
d = {1 : 1, 1 : 2}
print(d) #{1: 2}
python的字典,采用hash的方式实现
1. 存储过程: 初始化一块表格(哈希表,用于存放所有的值
根据给定的key,通过某些操作,得到一个”哈希表“里面的指定索引位置
根据索引位置,存储给定的值
2.取值过程: 根据key,运算索引,查找对应数值
索引转换过程:
1 将key转换为整形数字 ”哈希值“
2 对数组的长度进行取余,取余结果作为数组的下标
3 如果产生”哈希冲突“,采用”开放寻址法“,通过探测函数寻找下一个空位。

存在意义

1 通过key访问对应的值,使得访问更有意义
2 查询效率有很大的提升

常用操作

增加

#dic[key : value] 
#当key在原字典不存在时候,即为新增操作
d = {"name" : "hello", "age" : 18}
print(d, id(d)) #{'name': 'hello', 'age': 18} 2209878362368
d["height"] = 180 
print(d, id(d)) #{'name': 'hello', 'age': 18, 'height': 180} 2209878362368

删除

#方法1 del dic[key]
#不能删除不存在的key,否则会报错key error
d = {"name" : "hello", "age" : 18}
print(d) #{'name': 'hello', 'age': 18}
del d["name"]
print(d) #{'age': 18}

#方法2 dic.pop(key [,default])
#弹出给定的键值对,返回其对应的值
#若key不存在,返回给定的default值 不做删除动作
#若key不存在,无default值 则报错
d = {"name" : "hello", "age" : 18}
print(d, d.pop("name")) #{'age': 18} hello
print(d.pop("height", 180)) #180
#print(d.pop("height")) #KeyError: 'height'

#方法3 dic.popitem()
#删除按照升序排序后的第一个键值对,以元组的形式返回该键值对
#如果字典为空 报错
d = {"name" : "hello", "age" : 18}
print(d.popitem()) #('age', 18)
print(d) #{'name': 'hello'}
d = {}
#print(d.popitem()) #'popitem(): dictionary is empty'

#方法4 dic.clear()
#删除字典里面所有的键值对
#返回None
#字典本身还存在 只不过值为空 del是可以删除整个字典
d = {"name" : "hello", "age" : 18}
print(d.clear()) #None
print(d) #{}
d = {"name" : "hello", "age" : 18}
del d
print(d) #NameError: name 'd' is not defined

修改

只能改值,不能改key
#dic[key] = value
d = {"name" : "xxx", "age" : 18}
print(d) #{'name': 'xxx', 'age': 18}
d["name"] = "1"
print(d) #{'name': '1', 'age': 18}

#olddic.update(newdic)
#批量修改键值对 有则改之 无则加入
d = {"name" : "xxx", "age" : 18}
d.update({"name" : "123", "height" : 180})
print(d) #{'name': '123', 'age': 18, 'height': 180}

查询操作

获取单个值

#1 dic[key]
d = {"name" : "xxx", "age" : 18}
print(d["name"]) #xxx 必须用key 不能是索引!

#2 dic.get(key [,default])
#如果不存在key 则取对应的默认值default 
#如果没有默认值 则返回None
#不存在key时候,不会新增键值对
d = {"name" : "xxx", "age" : 18}
print(d.get("name")) #xxx
print(d.get("height", 666)) #666
print(d.get("height")) #None

#3 dic.setdefault(key[, default])
#获取指定key对应的值
#如果key不存在,设定给定的默认值,返回默认值
#如果默认值没给定 则None  会加入新的位未知的键值对
d = {"name" : "xxx", "age" : 18}
print(d.setdefault("name")) #xxx
print(d.setdefault("height")) # None
print(d) #{'name': 'xxx', 'age': 18, 'height': None}

获取多个key/值

视图对象
不支持索引
#获取所有值
#dic.values()
d = {"name" : "xxx", "age" : 18}
print(d.values()) #dict_values(['xxx', 18]) <class 'dict_values'>
#获取所有的键
print(d.keys()) #dict_keys(['name', 'age'])
#获取键值对
print(d.items()) #dict_items([('name', 'xxx'), ('age', 18)])
print(list(d.items())) #[('name', 'xxx'), ('age', 18)]
print(tuple(d.items())) #(('name', 'xxx'), ('age', 18))

遍历

#先获取所有的key 然后根据取到的key,获取对应的值
d = {"name" : "xxx", "age" : 18}
keys = d.keys()
for key in keys:
    print(d[key]) #xxx 18

#直接遍历所有的键值对
items = d.items()
for key,value in items:
    print(key, value) #name xxx age 18

计算键值对的个数

d = {"name" : "xxx", "age" : 18}
print(len(d)) #2

判断key是否在字典中

#key in dic
d = {"name" : "xxx", "age" : 18}
print("name" in d) #True
#key not in dic
print("height" in d) #False

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值