给定嵌套Json中的一个字符串,如何更改给定特定字符串的id?

2024-06-26 00:07:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在读一个Json,它是几个字典的列表,如下所示:

a_list = [ {
    "ID": "20394820938",
    "data": [
      {
        "fruit": "tomato",
        "provider": "walmart",
        "availability": "True",
        "Type": false
      },
      {
        "fruit": " orange ",
        "Type": false
      },
      {
        "fruit": "watermelon",
        "provider": "destination",
        "availability": "cotsco",
        "Type": false
      },
      {
        "fruit": " the watermelon is new",
        "Type": false
      }
    ],
    "API": false,
    "count": 0
  },  
  {
    "ID": "203948lHBFNPO",
    "data": [
      {
        "fruit": "apple",
        "provider": "walmart",
        "availability": "True",
        "Type": false
      },
      {
        "fruit": " this is a tomato ",
        "Type": false
      },
      {
        "fruit": "lemon",
        "provider": "unknown",
        "availability": "cotsco",
        "Type": false
      },
      {
        "fruit": " orange ",
        "Type": false
      },
      {
        "fruit": "banana",
        "provider": "unknown",
        "availability": "unknown",
        "Type": false
      }
    ],
    "API": false,
  }
]

当且仅当字典的一个子元素中有字符串apple时,如何将IM00N附加到Json的id值?例如:

a_list = [ {
    "ID": "20394820938",
    "data": [
      {
        "fruit": "tomato",
        "provider": "walmart",
        "availability": "True",
        "Type": false
      },
      {
        "fruit": "apple",
        "Type": false
      },
      {
        "fruit": "watermelon",
        "provider": "destination",
        "availability": "cotsco",
        "Type": false
      },
      {
        "fruit": " the watermelon is new",
        "Type": false
      }
    ],
    "API": false,
    "count": 0
  },  
  {
    "ID": "IM00N-203948lHBFNPO",
    "data": [
      {
        "fruit": "apple",
        "provider": "walmart",
        "availability": "True",
        "Type": false
      },
      {
        "fruit": " this is a tomato ",
        "Type": false
      },
      {
        "fruit": "lemon",
        "provider": "unknown",
        "availability": "cotsco",
        "Type": false
      },
      {
        "fruit": " orange ",
        "Type": false
      },
      {
        "fruit": "banana",
        "provider": "unknown",
        "availability": "unknown",
        "Type": false
      }
    ],
    "API": false,
  }
]

我试图构建一个正则表达式,但这很困难,因为列表中每个子字典的元素都没有模式。正确的匹配和替换方法是什么


Tags: apiidfalsetruedataistypeprovider
1条回答
网友
1楼 · 发布于 2024-06-26 00:07:46

可以使用for循环修改数据:

for entry in a_list:
    if any('apple' in item['fruit'] for item in entry['data']):
        entry['ID'] = 'IM00N-' + entry['ID']

如果数据的形状不同,因此某些条目没有fruit键,则可以捕获KeyError或使用dict.get

for entry in a_list:
    if any('apple' in item.get('fruit', '') for item in entry.get('data', [])):
        entry['ID'] = 'IM00N-' + entry['ID']

相关问题 更多 >