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

合并存储DataFrame的两个字典时循环合并结果与手动不一致如何解决

代码问题核心原因

  • 最根本的问题是dict.keys()的遍历顺序不可靠:Python 3.7之前的版本,字典的键不保留插入顺序,遍历keys()返回的顺序是随机的,你预期的「按插入位置配对」实际是乱序配对,自然和手动逐对合并的结果不一致。即使是Python 3.7+版本支持字典保留插入顺序,只要两个字典的键插入顺序不同,也会出现配对错误。
  • 次要风险:如果两个字典的键数量不一致,zip()会自动以更短的字典长度为准截断,剩余的键直接被丢弃且不会抛出报错,容易遗漏数据。

修正方案

方案1:确需按插入位置配对的写法

显式将键转为列表固定顺序,同时增加长度校验避免截断问题:

Total_data_dict = {}
# 显式固化键的遍历顺序
keys_1 = list(dict_1.keys())
keys_2 = list(dict_2.keys())

# 提前校验长度匹配
if len(keys_1) != len(keys_2):
    raise ValueError("两个字典键的数量不匹配,无法按位置配对")

for k1, k2 in zip(keys_1, keys_2):
    Total_data_dict[f"Total_{k1}"] = pd.merge(dict_1[k1], dict_2[k2], on=['Name'], how='inner')

方案2:按相同键名配对(多数场景的实际需求)

如果两个字典同键名的DataFrame才需要合并,直接取公共键遍历即可,完全规避顺序问题:

Total_data_dict = {}
# 取两个字典的公共键遍历
common_keys = dict_1.keys() & dict_2.keys()
for k in common_keys:
    Total_data_dict[f"Total_{k}"] = pd.merge(dict_1[k], dict_2[k], on=['Name'], how='inner')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:54:08