Python 如何根据属性值将数组拆分为另一个数组?
我有一个数组,其中包含几种类型的dict,例如:Python 如何根据属性值将数组拆分为另一个数组?,python,arrays,Python,Arrays,我有一个数组,其中包含几种类型的dict,例如: arr = [ {'type': 'employee.update', ...}, {'type': 'job.started', ...}, {'type': 'meeting.xpto', ...} ... ] 如何按类型前缀拆分“main”数组?是否需要对每个前缀遍历整个数组 employess_actions = list(filter(lambda x: x['type'].startswith('
arr = [
{'type': 'employee.update', ...},
{'type': 'job.started', ...},
{'type': 'meeting.xpto', ...}
...
]
如何按类型前缀拆分“main”数组?是否需要对每个前缀遍历整个数组
employess_actions = list(filter(lambda x: x['type'].startswith('employee.'), arr))
job_actions = list(filter(lambda x: x['type'].startswith('job.'), arr))
meeting_actions = list(filter(lambda x: x['type'].startswith('meeting.'), arr))
有没有实现这一目标的有效方法?或者以pythonic方式。您可以使用(默认)dict按前缀收集元素:
from collections import defaultdict
result = defaultdict(list)
for o in arr:
result[o["type"][:o["type"].index(".")]].append(o)
这当然假设所有这些类型中都有一个“.”
例如,如果:
arr = [
{"type": "employee.update"},
{"type": "job.started"},
{"type": "meeting.xpto"},
{"type": "job.ended"}
]
然后生成的结果
为
{
"employee": [{"type": "employee.update"}],
"job": [{"type": "job.started"}, {"type": "job.ended"}],
"meeting": [{"type": "meeting.xpto"}]
}
您可以迭代
arr
,使用前缀作为键将每个类型分组。我们可以使用在
上拆分类型,然后使用元组解包来解包前缀
从集合导入defaultdict
arr=[
{'type':'employee.update'},
{'type':'job.started'},
{'type':'meeting.xpto'}
]
类型=defaultdict(列表)
对于arr中的dic:
前缀,ux=dic[“类型”]。拆分(“.”)
类型[前缀]。追加(dic)
打印(类型)
输出:
defaultdict(<class 'list'>, {'employee': [{'type': 'employee.update'}], 'job': [{'type': 'job.started'}], 'meeting': [{'type': 'meeting.xpto'}]})
这将给出:
defaultdict(<class 'list'>, {'employee': ['employee.update'], 'job': ['job.started'], 'meeting': ['meeting.xpto']})
defaultdict(,{'employee':['employee.update'],'job':['job.started'],'meeting':['meeting.xpto']})
直接在arr
上循环不是更简单吗?
defaultdict(<class 'list'>, {'employee': ['employee.update'], 'job': ['job.started'], 'meeting': ['meeting.xpto']})