字典和集合

本文详细介绍了Python中的字典和集合。字典是一种无序可变数据类型,由键值对组成,键必须是不可变类型。文章讨论了字典的创建、访问、添加、删除元素以及底层实现原理。集合同样是无序可变的,只包含唯一元素,提供了并集、交集和差集等操作。内容包括集合的创建、增加和删除元素。
摘要由CSDN通过智能技术生成

字典

字典特点

  1. 键值对,包含键对象和值对象
  2. 无序可变序列
  3. 通过键对象操作键值对
  4. 键是任意不可变数据(整数,浮点数,字符串,元组),列表,字典,集合这些可变对象不能作为键
  5. 键不能重复
  6. 值可以任意数据可以重复

字典操作

字典的创建

  • 通过 { } 或dict()函数

1.a={“name”:“gaogao”,“age”:18,“job”:“programmer”} #用冒号表示键值对应关系
2. b=dict(name=“gaogao”,age=18,job=“programmer”) #dict函数,括号内用等号指明键值对应关系,键不用引号
3. c=dict([(“name”,“gaoqi”),(“age”,18),(“job”,“programmer”)]) #dict函数,以元组形式列出对应关系,包含在一个列表中

  • 通过zip()创建

a=[“a”,“b”,“c”]
b=[1,2,3]
c=dict(zip(a,b))
d=dict(zip(b,a))

  • 通过fromkey创建字典

a=dict.fromkeys([“name”,“age”,“job”])
输出值的部分为None,也是一个值,表示空

字典元素的访问

  • 通过键索引
  • a.get(键,“设定值”)

优点:若没有该键,则返回none,而不是报错
可以指定不存在时返回的值

  • a.items()获得所有键值对
  • a.keys()列出所有的键
  • a.values()列出所有的值
  • len(a)获得键值对个数
  • “name” in a : True检测键是否在字典中

元素的添加

  • a[“sex”]=“female” #直接赋值,可以改值也可以添加键值对
  • a.update(b) #用update更新字典,可以替换也可以添加,以括号里的字典为准

元素的删除

  • del(a[“name”]) #通过dei,[]内用键索引删除
  • a.pop(“age”) #()内用键索引删除,返回对应的值
  • a.clear() #全部删除,clear只是清空字典,但a仍是字典格式,空字典
  • a.popitem() #popitem随机删除键值对,并返回该键值对,用元组格式

序列解包

元组,列表,字典都可以解包

  • x,y,z=1,2,3
    x,y,z=(1,2,3) #元组
    [a,b,c]=[“d”,“e”,“f”]
  • a={“name”:“gaogao”,“age”:18,“job”:“programmer”}
    m,n,p=a #默认m,n,p被赋予
  • x,y,z=a.values() #x,y,z被赋予
  • o,p,q=a.items() #o,p,q被赋予键值对,存放在元组

字典底层原理

  1. 字典对象的核心是散列表
  2. 散列表是一个稀疏数组
  3. 数组的每个单元叫做bucket(表元)
  4. 每个bucket有两部分:键对象的引用值对象的引用
  5. 键必须可散列:数字,字符串,元组都是可散列的(以散列表的结构存储)
  6. 字典在内存中开销巨大,空间换时间
  7. 向字典中添加新键可能导致扩容,导致散列表中的键的次序变化,注意不要同时进行遍历操作

将键值对放进字典底层过程

  • 创建字典对象,已知数组长度为8
  • 要将“name”=“gao”放进散列数组,先计算“name”的散列值,通过hash来计算 bin(hash(“name”))
  • 得到二进制散列值,因为长度为8,先看后三位的值以及对应位置是否为空,若为空,插入,若不为空,依次取右侧三位作为偏移量
  • 会根据散列表的拥挤程度扩容(创建更大的数组,将原有内容拷贝过去),接近2/3时

根据键查找键值对的底层过程

  • a.get(“name”)
  • 计算name的散列值,根据后三位偏移找到相应的bucket,取出存储的键,求其散列值,若与“name”相同,那么返回改键对应的值即可

集合

集合特点

  1. 集合就是字典,但只有键对象
  2. 集合无序可变
  3. 元素不能重复

集合操作

创建集合

  • a={1,2,3}

print(type(a)) #set

  • #使用set元组,列表,字符串变成集合

a=[1,2,3]
b=“abc”
c=(“a”,1,2)
print(set(a),set(b),set©)

增加元素

a.add(9)

删除元素

  • remove删除指定元素

a={1,2,3,4,5}
a.remove(3)

  • clear 清空集合

a.clear()

交/并/差集

两套操作都不改变原集合

  • 并集

a|b
a.union(b)

  • 交集

a&b
a.intersection(b)

  • -差集

a-b
a.difference(b)

代码

#字典的创建
a={
   "name":"gaogao","age":18,"job":"programmer"}  #用冒号表示键值对应关系
print(a)
b=dict(name="gaoqi",age=18,job="programmer")  #dict函数,括号内用等号指明键值对应关系,键不用引号
print(b)
c=dict([("name","gaoqi"),("age"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值