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

将同键字典列表合并为单列表时遇AttributeError问题排查

嘿,我来帮你拆解这个问题!

错误原因分析

你遇到的 AttributeError: 'str' object has no attribute 'iterkeys' 本质是两个问题叠加:

  1. 版本语法差异:iterkeys() 是 Python 2 中字典的专属方法,Python 3 已经把它替换成了 keys()(或者直接用 items() 遍历键值对);
  2. 类型不匹配:最关键的是——你代码中调用 iterkeys() 的对象根本不是字典,而是字符串!这说明你的字典列表里可能混进了非字典元素(比如某个位置是纯字符串),或者你在遍历过程中误把字典的字符串值当成字典来操作了。

针对你的场景的解决方案

既然你说所有字典的键都相同,且值是字符串类型,我分两种常见需求给你对应代码:

需求1:提取某个特定键的所有字符串值,合并成一个列表

比如你想把所有字典里的 name 字段值合并:

# 示例输入(确保列表里都是字典,若有混进字符串可加判断)
dict_list = [
    {"name": "Alice", "city": "NYC"},
    {"name": "Bob", "city": "London"},
    {"name": "Charlie", "city": "Tokyo"}
]

# 提取name字段,同时过滤非字典元素避免报错
result = [d["name"] for d in dict_list if isinstance(d, dict)]
print(result)
# 输出: ['Alice', 'Bob', 'Charlie']

需求2:把所有相同键对应的字符串值,合并成一个键为列表的字典

比如把每个键对应的所有字符串值收集到列表里:

from collections import defaultdict

dict_list = [
    {"name": "Alice", "city": "NYC"},
    {"name": "Bob", "city": "London"},
    {"name": "Charlie", "city": "Tokyo"}
]

merged = defaultdict(list)
for item in dict_list:
    # 先判断当前元素是不是字典,避免字符串触发错误
    if not isinstance(item, dict):
        continue
    # Python 3用items()遍历键值对,替代Python 2的iteritems()
    for key, value in item.items():
        merged[key].append(value)

# 转换成普通字典(可选)
merged_dict = dict(merged)
print(merged_dict)
# 输出: {'name': ['Alice', 'Bob', 'Charlie'], 'city': ['NYC', 'London', 'Tokyo']}

为什么你的问题不是重复提问?

你提到之前的类似问题都是处理数值类型,但其实核心差异不在值的类型,而在于你触发了字符串 vs 字典的类型错误——上面的代码特意加入了 isinstance(item, dict) 的判断,既能避免非字典元素导致的报错,也能完美兼容字符串类型的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:26:21