如何正确追加嵌套列表中的多个字典值以生成符合预期的Pandas输出
原代码问题定位
- 聚合粒度错位:原代码遍历到每个内层字典就单独追加一条记录,最终会生成9行结果,和预期的「每个lst顶层子列表对应1行(共4行)」的维度要求不匹配。
- 结果拼接格式不符:原代码用逗号直接拼接匹配值,未在逗号后加空格,和预期的
"abc2, abc14"这类带空格的格式不匹配。 - 无效字典未过滤:原代码未排除key为纯数字、带空格、空字符串的无效字典,会错误把
{'4': 'abc10'}这类条目里的abc值纳入结果,和预期输出不符。 - DataFrame列名错误:原代码设置的列名是
Result,和预期的final_result列名不一致。
正确实现逻辑
- 以lst中的每个顶层子列表为独立处理单元,在当前单元内收集所有符合规则的值,单元处理完成后再生成一条结果存入总列表,保证结果长度和lst顶层元素数一致。
- 字典有效性判断规则:仅保留key为「单个大写英文字母」的字典,纯数字key、带空格的key、空key对应的字典直接跳过。
- 值匹配规则:对有效字典,提取对应的value,若value中包含
abc字符串,则将该值加入当前单元的收集列表。 - 结果格式化:每个单元的收集列表用
,(逗号加空格)拼接为字符串;若收集列表为空,则赋值为NA。 - 生成DataFrame时将列名设置为
final_result。
可直接运行的修正代码
lst = [[{'A': 'abc1'}], [{'A': 'xyz'}, {'2 ': '123'}], [{'A': 'abc2'}, {'B': 'abc14'}], [{'X': 'abc3'}, {'B': 'abc4'}, {'4': 'abc10'}, {'': '123dfghfh'}]] import pandas as pd result = [] for wrd in lst: # 在当前顶层子列表范围内收集符合条件的值 collected_vals = [] for dct in wrd: # 提取字典内的键值对(所有测试字典均为单键值对结构) for key, val in dct.items(): # 过滤无效字典:仅保留单个大写字母作为key的条目 if len(key) == 1 and key.isalpha() and key.isupper(): # 匹配值中包含abc的条目 if 'abc' in val: collected_vals.append(val) # 格式化当前单元的结果 if collected_vals: result.append(', '.join(collected_vals)) else: result.append('NA') # 生成指定列名的DataFrame final_result = pd.DataFrame({'final_result': result})
运行输出验证
上述代码运行后得到的输出和预期完全一致:
final_result 0 abc1 1 NA 2 abc2, abc14 3 abc3, abc4
内容的提问来源于stack exchange,提问作者Goutam
相关产品推荐
相关产品推荐

