第八弹 python的数据类型 之 字典 dict

简介

键值对的集合,键必须是唯一且互不相同的,非可哈希的值如:列表、字典或其它可变类型的值不可作为键。字典的主要操作是依据键来存储和析取值。

字典操作

创建字典

1. {} 创建

# 创建一个空字典
d = {}

# 创建字典
d = {'name': 'zs'}

2. 字典推导式创建

{k: v for k, v in zip(['name', 'age'], ['zs', 10])}
# {'name': 'zs', 'age': 10}

3. 字典类型构造器创建

d = dict()
#{}

d = dict(name='zs')
#{'name': 'zs'}

d = dict([('name', 'zs')])
#{'name': 'zs'}

4. fromkeys创建

格式:

dict.fromkeys(iterable, value=None, /)

创建一个新字典,以序列iterable中元素作为字典的键,value为字典所有键的初始值;

  • iterable:字典键序列
  • value: 字典初始值;可选;默认为None

例子:

d  = dict.fromkeys(['name', 'age', 'sex'])
# {'name': None, 'age': None, 'sex': None} 

查询

1. 通过key查询

格式:

d[key]

通过key查找对应的值;如果不存在则会引发KeyError异常;
如果字典的子类定义了方法__missing__(),并且 key 不存在,则 d[key] 操作将调用该方法并附带键 key 作为参数。d[key] 随后将返回或引发 __missing__(self, key) 调用所返回 或 引发的任何对象或异常。
如果键不存在,且未定义__missing__(),则会引发KeyError。__missing__()必须是一个方法;

例子:

class Counter(dict):
    def __missing__(self, key):
        return 0

c = Counter()
c['red']
#0
c['red'] + 1
#1

2. get

格式:

d.get(key, default=None, /)

如果key存在于字典中,则返回key的值;否则则返回default;如果default未给,默认值为None;不会引发KeyError异常;

例子:

d = {'name': 'zs'}

d.get('name')
#'zs'

d.get('age')
#None

3. setdefault

格式:

dict.setdefault(key, default=None, /)

如果key存在,则返回它的值。如果不存在,插入键并将其值设置为default,并返回default。default默认为None

  • key:键
  • default:键不存在时,设置的默认值

例子:

>>> d = {'name': 'zs'}
>>> d.setdefault('age', 10)
10
>>> d
{'name': 'zs', 'age': 10}

4. items

格式:

d.items()

返回由字典项组成的视图对象。类型为:dict_items;该对象提供字典条目的动态视图,字典改变时。视图也会相应的改变;
视图对象不是列表,不支持索引,可以使用list()转换为列表;也不能对视图对象进行任何修改,因为字典的视图对象都是只读的

例子:

d = {'name': 'zs'}
# dict_items([('name', 'zs')])

5. keys

格式:

d.keys()

返回由字典键组成的新视图;

例子:

d = {'name': 'zs'}
# dict_keys(['name'])

6. values

格式:

d.values()

返回由字典值组成的新视图

例子:

d = {'name': 'zs'}
d.values()
# dict_values(['zs'])

更新字典

1. key更新

格式:

d[key] = value

将key的值设置为value

例子:

d = {'name': 'zs'}
d['name'] = 'ls'
# {'name': 'ls'}

2. update

格式:

d.update([other])

使用来自于other的键值对更新字典,覆盖原有的键;返回None;update接受另一个字典对象,或包含键/值对的可迭代对象

例子:

d  =  {'name': 'zs'}
d.update({'name': 'ls', 'age': 10})
# {'name': 'ls', 'age': 10}

d.update([('addr', '上海')])
# {'name': 'ls', 'age': 10, 'addr': '上海'}

d.update(color='red')
# {'name': 'ls', 'age': 10, 'addr': '上海', 'color': 'red'}

key是否存在

1. in

格式:

x in d

判断字典d是否存在键 x ,如果存在返回True,反之返回False

例子:

d = {'name': 'zs'}
print('name' in d)
#True

2. not in

格式:

x not in d

等价于 not x in d

例子:

d = {'name': 'zs'}
print('name' not  in d)
#False

删除

1. clear

格式:

d.clear()

清空字典

例子:

d = {'name': 'zs'}
d.clear()
# {}

2. del

格式:

del d[key]
del d

删除字典中特定key或整个字典

例子:

d = {'name': 'zs'}

#删除特定key
del d['name']

#删除整个字典
del d

3. pop

格式:

d.pop(key[, default])

如果key存在字典中,则将其移除并返回其值,否则返回default。如果default未给出且key不存在于字典中,触发KeyError异常;

例子:

>>> d = {'name': 'zs'}
>>> d.pop('name')
'zs'
>>> d.pop('name')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'name'
>>> d.pop('name', None)
>>>

4. popitem

格式:

d.popitem()

从字典中移除并返回一个键值对。键值对按照LIFO的顺序被返回

例子:

>>> d = {'name': 'zs'}
>>> d['age'] = 10
>>> d.popitem()
('age', 10)
>>> d.popitem()
('name', 'zs')

统计字典键值对个数

格式:

len(d)

统计字典键值对个数
例子:

d = {'name': 'zs'}
len(d)
# 1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值