python容器——dict字典的特点及其创建,元素的访问,添加,更新,删除

dic字典

字典是键值对的无序可变序列

键是任意不可变数据(tuple,整数,浮点数,字符串),不可重复

创建

1 通过{},dict创建

>>> d = {
...     'Alice': 45,
...     'Bob': 60,
...     'Candy': 75,
...     'David': 86,
...     'Ellena': 49
... }
>>> d
{'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49}
>>> L = [('Alice',45),('Bob',60),('Candy',75),('David',86),('Ellena',49)]
>>> d = dict(L)
>>> d
{'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49}

2 通过zip()创建字典对象

>>> k=['Alice', 'Bob', 'Candy', 'David', 'Ellena']
>>> j=[45, 60, 75, 86, 49]
>>> d=dict(zip(k,j))
>>> d
{'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49}

3 通过fromkeys()创建值为空的字典

>>> e=dict.fromkeys(['Alice', 'Bob', 'Candy', 'David', 'Ellena'])
>>> e
{'Alice': None, 'Bob': None, 'Candy': None, 'David': None, 'Ellena': None}

访问

1 通过键获得值

键不存在,抛出异常

>>> d = {'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49}
>>> d['Bob']
60
>>> d['Mary']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Mary'  

2 通过get()方法获得值

键不存在,不会报错

>>> d.get('Candy')
75
>>> d.get('Mary')

3 列出所有的键值对

>>> d.items()
dict_items([('Alice', 45), ('Bob', 60), ('Candy', 75), ('David', 86), ('Ellena', 49)])

4 列出所有的键 列出所有的值

>>> d.keys()
dict_keys(['Alice', 'Bob', 'Candy', 'David', 'Ellena'])
>>> d.values()
dict_values([45, 60, 75, 86, 49])

5 len()键值对的个数

>>> len(d)
5

6 检测一个键是否在字典中

>>> 'Alice' in d
True

元素添加

1 新增键值对

若原先存在键,则覆盖值

>>> d['Alice']=55
>>> d
{'Alice': 55, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49}

2 update()

将字典中所有值全部添加到旧字典对象上。若key重复则进行覆盖

>>> a = {'Alice': 55, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49}
>>> b = {'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Dodo':65}
>>> a.update(b)
>>> a
{'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49, 'Dodo': 65}

元素删除

d = {'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49}

1 del()

删除指定键值对

>>> del(d['Alice'])
>>> d
{'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49}

2 pop()

删除指定键值对并返回值

>>> d = {'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49}
>>> di=d.pop('Alice')
>>> di
45
>>> d
{'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49}

3 clear()

删除所有键值对

>>> d.clear()
>>> d
{}

4 popitem()

随机删除和返回该键值对

>>> d.popitem()
('Ellena', 49)
>>> d
{'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86}
>>> d.popitem()
('David', 86)
>>> d
{'Alice': 45, 'Bob': 60, 'Candy': 75}

序列解包

可以用于元组,列表,字典

方便对多个元素赋值

元组,列表

>>> x,y,z=(30,10,20)
>>> x
30
>>> T=x,y,z
>>> T
(30, 10, 20)
>>> a,b,c=[50,70,30]
>>> a
50
>>> L=a,b,c
>>> L
(50, 70, 30)

字典

>>> d = {'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49}
>>> one,two,three,four,five = d #默认对键进行操作
>>> one
'Alice'
>>> one,two,three,four,five = d.items() #对键值对进行操作
>>> one
('Alice', 45)

使用字典和列表储存表格数据

>>> r1={'name':'m1','age':'18'}
>>> r2={'name':'m2','age':'16'}
>>> r3={'name':'m3','age':'17'}
>>> tb=[r1,r2,r3]
>>> tb[0].get('name')
'm1'
>>> for i in range(len(tb)):
...     print(tb[i].get('age')
...
18
16
17

字典核心底层原理

字典对象的核心是散列表

散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单位叫做bucket

每个bucket结构和大小一致,可以通过偏移量来读取指定bucket

>>> a={}
>>> a['name']='mi'
>>> a
{'name': 'mi'}
>>> bin(hash('name'))
'0b110001010010100000111100010100101011111111100011001000110011011'

以下来自:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值