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

如何统计字典列表中特定键出现次数并追加子项计数

统计字典列表中子项数量并更新名称

问题

需要处理嵌套字典列表,实现两个目标:

  1. 给每个人员的名称后追加其拥有的动物数量,格式如 Winifred Graham [6]
  2. 给每个地区的名称后追加该地区的总动物数(或总人数),格式如 Satanwi [1]

当前的代码仅能打印人员名称加动物数,无法完成完整需求:

for dico in data:
    for ele in dico['people']:
                  print(ele['name']+str(len(ele['animals'])))

输入数据 entries:

[
  {
    "name": "Uzuzozne",
    "people": [
      {
        "name": "Lillie Abbott",
        "animals": [
          {
            "name": "John Dory"
          }
        ]
      }
    ]
  },
  {
    "name": "Satanwi",
    "people": [
      {
        "name": "Anthony Bruno",
        "animals": [
          {
            "name": "Oryx"
          }
        ]
      }
    ]
  },
  {
    "name": "Dillauti",
    "people": [
      {
        "name": "Winifred Graham",
        "animals": [
          { "name": "Anoa" },
          { "name": "Duck" },
          { "name": "Narwhal" },
          { "name": "Badger" },
          { "name": "Cobra" },
          { "name": "Crow" }
        ]
      },
      {
        "name": "Blanche Viciani",
        "animals":
          [{ "name": "Barbet" },
          { "name": "Rhea" },
          { "name": "Snakes" },
          { "name": "Antelope" },
          { "name": "Echidna" },
          { "name": "Crow" },
          { "name": "Guinea Fowl" },
          { "name": "Deer Mouse" }]
      }
    ]
  }
]

期望输出示例:

[ { 'name': 'Dillauti [14]',
    'people':
     [ { 'name': 'Winifred Graham [6]',
         'animals':
          [ { 'name': 'Anoa' },
            { 'name': 'Duck' },
            { 'name': 'Narwhal' },
            { 'name': 'Badger' },
            { 'name': 'Cobra' },
            { 'name': 'Crow' } ] },
       { 'name': 'Blanche Viciani [8]',
         'animals':
          [ { 'name': 'Barbet' },
            { 'name': 'Rhea' },
            { 'name': 'Snakes' },
            { 'name': 'Antelope' },
            { 'name': 'Echidna' },
            { 'name': 'Crow' },
            { 'name': 'Guinea Fowl' },
            { 'name': 'Deer Mouse' } ] },
      ...
]

解决方案

通过嵌套遍历统计子项数量,直接更新对应名称即可完成需求:

完整代码

def update_names(data):
    for region in data:
        total_animals = 0
        # 处理每个人员的名称,统计动物数量
        for person in region['people']:
            animal_count = len(person['animals'])
            person['name'] = f"{person['name']} [{animal_count}]"
            total_animals += animal_count
        # 处理地区名称,这里用总动物数,要统计人数就换成 len(region['people'])
        region['name'] = f"{region['name']} [{total_animals}]"
    return data

# 测试数据
entries = [
  {
    "name": "Uzuzozne",
    "people": [
      {
        "name": "Lillie Abbott",
        "animals": [
          {
            "name": "John Dory"
          }
        ]
      }
    ]
  },
  {
    "name": "Satanwi",
    "people": [
      {
        "name": "Anthony Bruno",
        "animals": [
          {
            "name": "Oryx"
          }
        ]
      }
    ]
  },
  {
    "name": "Dillauti",
    "people": [
      {
        "name": "Winifred Graham",
        "animals": [
          { "name": "Anoa" },
          { "name": "Duck" },
          { "name": "Narwhal" },
          { "name": "Badger" },
          { "name": "Cobra" },
          { "name": "Crow" }
        ]
      },
      {
        "name": "Blanche Viciani",
        "animals":
          [{ "name": "Barbet" },
          { "name": "Rhea" },
          { "name": "Snakes" },
          { "name": "Antelope" },
          { "name": "Echidna" },
          { "name": "Crow" },
          { "name": "Guinea Fowl" },
          { "name": "Deer Mouse" }]
      }
    ]
  }
]

# 执行并格式化输出
import pprint
result = update_names(entries)
pprint.pprint(result)

代码说明

  1. 遍历地区:外层循环逐个处理每个地区字典,初始化总动物数计数器。
  2. 处理人员:内层循环遍历地区下的每个人员,计算其动物数量并更新名称。同时累加该地区的总动物数。
  3. 更新地区名称:用累加的总动物数更新地区名称,若需要统计人数,只需把total_animals换成len(region['people'])。
  4. 格式化输出:用pprint模块让输出结构更清晰易读。

运行结果

执行后会得到符合要求的结构:

[{'name': 'Uzuzozne [1]',
  'people': [{'animals': [{'name': 'John Dory'}],
              'name': 'Lillie Abbott [1]'}]},
 {'name': 'Satanwi [1]',
  'people': [{'animals': [{'name': 'Oryx'}],
              'name': 'Anthony Bruno [1]'}]},
 {'name': 'Dillauti [14]',
  'people': [{'animals': [{'name': 'Anoa'},
                          {'name': 'Duck'},
                          {'name': 'Narwhal'},
                          {'name': 'Badger'},
                          {'name': 'Cobra'},
                          {'name': 'Crow'}],
              'name': 'Winifred Graham [6]'},
             {'animals': [{'name': 'Barbet'},
                          {'name': 'Rhea'},
                          {'name': 'Snakes'},
                          {'name': 'Antelope'},
                          {'name': 'Echidna'},
                          {'name': 'Crow'},
                          {'name': 'Guinea Fowl'},
                          {'name': 'Deer Mouse'}],
              'name': 'Blanche Viciani [8]'}]}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:45:54