Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据属性值将数组拆分为另一个数组?_Python_Arrays - Fatal编程技术网

Python 如何根据属性值将数组拆分为另一个数组?

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('

我有一个数组,其中包含几种类型的dict,例如:

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']})