2021-02-01 Python序列-字典

Python字典

SUMUP
在这里插入图片描述

定义

字典是“键值对”的无序可变序列
列表中我们通过“下标数字”找到对应的对象,字典中通过“键对象”找到对应的“值
对象”
“键”是任意的不可变数据,比如:整数、浮点数、字符串、元组;“键”不可重复
“值”可以是任意的数据,并且可重复
例子:
a = {‘name’:‘gaoqi’,‘age’:18,‘job’:‘programmer’}

创建

  • { } 或dict( )
>>> a={'name':'dog','age':1}
>>> b=dict(name='dog',age=1)
>>> c=dict([('name','dog'),('age',1)])
  • zip( )
>>> k = ['name','age','job']
>>> v = ['gaoqi',18,'techer']
>>> d = dict(zip(k,v))
>>> d
{'name': 'gaoqi', 'age': 18, 'job': 'techer'}
  • fromkeys,创建值为空的字典
>>> d=dict.fromkeys('name','age')
>>> d
{'n': 'age', 'a': 'age', 'm': 'age', 'e': 'age'}
>>> d=dict.fromkeys(['name','age'])
>>> d
{'name': None, 'age': None}

元素访问

  • 通过键获得值:a[‘name’];如果键不存在,报错
  • 通过get( )获得;若不存在,返回None或指定值(放在第二位)
  • items( ):列出所有键值对
  • keys( )、values( ):列出所有键/值
  • len( ):键值对个数
  • 监测键是否存在:‘name’ in a

元素添加、修改和删除

  • 新增键值对;如果存在则覆盖旧的
>>> a={'name':'dog','age':1}
>>> a['name']='cat'
>>> a['pet']=True
>>> a
{'name': 'cat', 'age': 1, 'pet': True}
>>> b={'age':3,'gender':'female'}
>>> a.update(b)
>>> a
{'name': 'cat', 'age': 3, 'pet': True, 'gender': 'female'}
  • del( )删除;pop( ) 删除指定键值对并返回值;clear( )删除所有键值对
>>> del(a['gender'])
>>> a
{'name': 'cat', 'age': 3, 'pet': True}
>>> a.pop('age')
3
>>> a
{'name': 'cat', 'pet': True}
>>> a.clear()
>>> a
{}
  • popitem( ) :随机删除和返回该键值对;若想一个接一个地移除并处理项,这个方法就非常有效

序列解包

可用于元组、列表、字典,用于对多个变量方便地赋值
例子:
元组:x,y,z=(10,20,30) (或 (x,y,z)=(10,20,30) )
列表:[a,b,c]=[10,20,30]
字典:

>>> a={'name':'dog','age':1,'pet':True}
>>> ## 默认得到键
>>> x,y,z=a
>>> x
'name'
>>> ## 通过values得到值
>>> x,y,z=a.values()
>>> x
'dog'
>>> ## 通过items()得到键值对
>>> x,y,z=a.items()
>>> x
('name', 'dog')

存储表格数据并进行访问

项目Value价格
电脑$16002
手机$123
导管$14
>>> r1={'name':'computer','price':1600,'amount':2}
>>> r2={'name':'handy','price':12,'amount':3}
>>> r3={'name':'conduit','price':1,'amount':4}
>>> table=[r1,r2,r3]
>>> table
[{'name': 'computer', 'price': 1600, 'amount': 2}, {'name': 'handy', 'price': 12, 'amount': 3}, {'name': 'conduit', 'price': 1, 'amount': 4}]
>>> table[1]['price']
12
>>> table[1].get('price')
12
>>> for i in range(len(table)):
...   table[i].get('price')
...
1600
12
1

字典核心底层原理

核心:散列表
散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫做bucket,每个bucket有两部分,一个是键对象的引用,一个是值对象的引用
由于所有bucket结构和大小一致,我们可以通过偏移量来读取指定bucket
底层过程:

  • 放入:计算键值的哈希值,根据这个值计算偏移量,找到偏移量对应为空的bucket放入键值
    在这里插入图片描述
  • 查找:
    在这里插入图片描述

特点

内存开销大,但查找迅速
往字典里面添加新建可能导致扩容,导致散列表中键的次序变化;因此,不要在遍历字
典的同时进行字典的修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值