You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python和Django从嵌套对象数组中提取items的id属性值

需求说明

我有如下结构的对象数组:

"output": [
  {
      "id": 1,
      "items": [
          {
              "id":"1",
              "data": {
                  "id": 3
              }
          },
          {
              "id": "2",
              "data": {
                  "id": 4
              }
          }
      ]
  },
  {
       "id": 2,
       "items": [
           {
               "id":"3",
               "data": {
                   "id": 5
               }
           }
       ]
   }
]

我需要提取所有items数组中的id属性存入新数组,预期输出结果为['1','2','3']。
我知道JavaScript中可以通过如下代码实现:

arr_obj.map(obj=>obj.items.map(item=>item.id)).flat()

我是Python和Django的新手,请问在Python和Django中该如何实现上述需求?
补充:控制台打印的原始数据格式示例如下:

output '[{'id': 1,'items': [{'id': 14, 'data': {'id': 1,}},}]'
实现方法

方法1:嵌套列表推导式(最推荐,写法简洁)

直接用Python内置的列表推导式即可实现,效果和你写的JS代码完全一致:

# 假设你的原始数据存储在变量output_arr中
result = [item['id'] for obj in output_arr for item in obj['items']]

如果你在Django中处理的是模型实例而非字典,把中括号取值换成点语法即可:

result = [item.id for obj in queryset for item in obj.items.all()]

方法2:兼容缺省字段的写法

如果部分对象可能不存在items字段、或者部分item不存在id字段,可加缺省判断避免报错:

result = [item.get('id') for obj in output_arr for item in obj.get('items', [])]

方法3:大数组高性能写法

如果数据量非常大,可以用itertools.chain优化内存占用:

from itertools import chain

all_items = chain.from_iterable(obj['items'] for obj in output_arr)
result = [item['id'] for item in all_items]

内容的提问来源于stack exchange,提问作者stackuser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:09:04