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

Python从嵌套字典中提取特定文本:提取含ft/mi/FT/MI的距离值并新增distance字段

解决嵌套结构中提取距离信息并添加新字段的问题

看起来你需要处理嵌套的字典列表(或Pandas DataFrame中的嵌套列),从每个子字典的state字段中提取带ft/mi/FT/MI的距离值,并添加到新的distance字段里。我来帮你修正代码逻辑,解决这个问题:

问题分析

你的原始代码没有正确处理嵌套结构——state字段并不是DataFrame的直接列,而是嵌套在class1列表的子字典中。直接对df['state']操作会报错,也无法遍历到每个子元素。

解决方案

根据你的数据结构,我提供两种常用场景的解决方法:

1. 纯Python字典列表处理

如果你的数据是原生Python列表字典,直接遍历嵌套结构并用正则提取即可:

import re
import json

# 你的原始数据
data = [
    { "id": 1243, "class1": [ {"count":5, "state": "Arizona 4.47ft" }, { "state": "Georgia 1023mi" } ] },
    { "id": 12438, "class1": [ {"count":2, "state": "Newyork 2022 NY 74.6 FT" }, { "state": "Indiana 747MI(In)" }, {"count":2, "state": "Florida 453mi FL" } ] }
]

# 定义正则:匹配整数/小数 + 可选空格 + 目标单位(保留原大小写)
distance_pattern = re.compile(r'(\d+\.?\d*\s?(?:ft|mi|FT|MI))')

# 遍历每个顶层元素
for top_item in data:
    # 遍历class1中的每个子字典
    for sub_item in top_item['class1']:
        # 从state字符串中匹配距离
        match_result = distance_pattern.search(sub_item['state'])
        if match_result:
            # 添加distance字段,去除可能的多余空格
            sub_item['distance'] = match_result.group(1).strip()

# 打印处理后的结果
print(json.dumps(data, indent=2))

2. Pandas DataFrame处理

如果你的数据已经存入Pandas DataFrame(从代码中的df推测),可以用apply函数处理嵌套的class1列:

import pandas as pd
import re

# 构造示例DataFrame
df = pd.DataFrame([
    { "id": 1243, "class1": [ {"count":5, "state": "Arizona 4.47ft" }, { "state": "Georgia 1023mi" } ] },
    { "id": 12438, "class1": [ {"count":2, "state": "Newyork 2022 NY 74.6 FT" }, { "state": "Indiana 747MI(In)" }, {"count":2, "state": "Florida 453mi FL" } ] }
])

distance_pattern = re.compile(r'(\d+\.?\d*\s?(?:ft|mi|FT|MI))')

# 定义处理每个class1列表的函数
def process_class_list(class_list):
    for sub_dict in class_list:
        match = distance_pattern.search(sub_dict['state'])
        if match:
            sub_dict['distance'] = match.group(1).strip()
    return class_list

# 对class1列应用处理函数
df['class1'] = df['class1'].apply(process_class_list)

# 输出处理后的结果
print(df.to_json(orient='records', indent=2))

正则表达式说明

  • \d+\.?\d*:匹配整数(如1023)或小数(如4.47、74.6)
  • \s?:匹配可选的空格,兼容74.6 FT这种带空格的格式
  • (?:ft|mi|FT|MI):非捕获组,精准匹配四种单位,保留原始大小写(比如不会把FT转成ft)

原始代码的问题总结

  1. 错误地尝试直接访问df['state'],但state是嵌套在class1的子字典中,不是DataFrame的直接列
  2. 没有遍历嵌套的class1列表,无法处理每个子元素的state字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:12:28