python字典列表过滤器(Python字典筛选)

网友投稿 1733 2022-09-19

python字典列表过滤器(Python字典筛选)

python字典列表过滤器(Python字典筛选)

目录

字典列表过滤器

需求

示例

代码

字典列表过滤器

需求

需求中对 获取到的字典列表根据关键字进行过滤, 筛选符合条件的数据

支持单个字段, 单个或多个数据过滤

{

"name": [ "m1.large","m1.xlarge","wangjw"]

}

# 过滤字段 "name", 满足列表中的任意一个即可

支持多个字段

{

"name":[ "m1.large","m1.xlarge","wangjw"],

"ram": 4096

}

# 必须同时满足 name, ram字段 对应的value值

示例

原始数据

d = [

{

'disk': 1,

'id': '1',

'is_disabled': False,

'is_public': True,

'name': 'm1.tiny',

'ram': 512,

'vcpus': 1

},

{

'disk': 20,

'id': '2',

'is_disabled': False,

'is_public': True,

'name': 'm1.small',

'ram': 2048,

'vcpus': 1

},

{

'disk': 40,

'id': '3',

'is_disabled': False,

'is_public': True,

'name': 'm1.medium',

'ram': 4096,

'vcpus': 2

},

{

'disk': 80,

'id': '4',

'is_disabled': False,

'is_public': True,

'name': 'm1.large',

'ram': 8192,

'vcpus': 4

},

{

'disk': 160,

'id': '5',

'is_disabled': False,

'is_public': True,

'name': 'm1.xlarge',

'ram': 16384,

'vcpus': 8

},

{

'disk': 50,

'id': 'abb677c9-1bf2-415d-97bd-ef62574690ed',

'is_disabled': False,

'is_public': True,

'name': 'wangjw',

'ram': 4096,

'vcpus': 2

},

...

]

过滤条件如下

filters = {

"name": ["m1.large", "m1.xlarge", "wangjw"],

"ram": 4096

}

最终结果

[

{

'disk': 50,

'id': 'abb677c9-1bf2-415d-97bd-ef62574690ed',

'is_disabled': False,

'is_public': True,

'name': 'wangjw',

'ram': 4096,

'vcpus': 2

}

]

代码

代码如下

#!/usr/bin/env python

# ~*~ coding: utf-8 ~*~

def list_filter(l, filters=None):

"""通过特殊字段过滤原始列表字典

:param filters: 字典构建的过滤字段

格式如下

1.同一字段,匹配多个选项

{

"name":[ "m1.large","m1.xlarge","wangjw"]

}

2.混合模式多个字段,不同字段有独立的匹配项

{

"name":[ "m1.large","m1.xlarge","wangjw"],

"ram": 4096

}

:param l: 目标字典列表

:return: 过滤后的列表

"""

rest_l = copy.deepcopy(l)

if not filters:

return l

for i in rest_l:

for k, v in filters.items():

if isinstance(v, (list, tuple)) and i.get(k) not in v:

l.remove(i)

break

elif not isinstance(v, (list, tuple)) and i.get(k) != v:

l.remove(i)

break

return l

使用copy 是因为字列表字典中 每个元素都是字典, 而字典属于引用性类型, 整个列表也就变成了引用性类型, 当进行remove操作时, 原始的列表也会更改

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Win10基础 msconfig 开启引导日志
下一篇:IE11基础 显示友好HTTP错误信息与404的页面跳转
相关文章

 发表评论

暂时没有评论,来抢沙发吧~