微前端架构如何改变企业的开发模式与效率提升
1733
2022-09-19
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~