Python3 利用filter()函数过滤/筛选/批量删除 字典/dict中的元素

需求

原字典如下:

{'1': {'type': 'A', 'id': 1},
 '2': {'type': 'B', 'id': 2},
 '3': {'type': 'C', 'id': 1},
 '4': {'type': 'D', 'id': 2},
 '5': {'type': 'D', 'id': 3}}

现在要求只保留其中'type'为'A'和'D'的元素,即处理后字典变为:

{'1': {'type': 'A', 'id': 1},
 '4': {'type': 'D', 'id': 2},
 '5': {'type': 'D', 'id': 3}}

代码为:

a = {'1': {'type': 'A', 'id': 1},
     '2': {'type': 'B', 'id': 2},
     '3': {'type': 'C', 'id': 1},
     '4': {'type': 'D', 'id': 2},
     '5': {'type': 'D', 'id': 3}}

allowed_keys = ['A', 'D']

print(dict(filter(lambda x: x[1]['type'] in allowed_keys, a.items())))

运行结果:

{'1': {'type': 'A', 'id': 1}, '4': {'type': 'D', 'id': 2}, '5': {'type': 'D', 'id': 3}}

解析

map和filter是两个非常好用的批量处理可迭代对象的函数,但这里要注意:

1.传入的iterator是dict.items()而不是dict本身

2.dict.items()返回该dict的视图对象(view objects),提供了字典实体的动态视图,这就意味着字典改变,视图也会跟着变化。

视图对象不是列表,不支持索引,可以使用 list() 来转换为列表。

我们不能对视图对象进行任何的修改,因为字典的视图对象都是只读的。

dict.items()中的单个元素是一个tuple,第一个元素是key,第二个元素是value。

3.filter()返回的对象需要通过转换为dict后才是一个dict。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值