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

Python提取两字典共同键生成新字典:代码返回空字典求解决

问题排查与解决方案

问题背景

有两个Python字典results和results_2,二者均以元组为键、数值为值,其中results的长度远小于results_2。需要找出两个字典的共同键,生成包含这些键及其对应两个字典中值的新结构(注:原预期输出的字典存在重复键,这不符合Python字典的规则,因此调整为每个键对应两个值的集合/列表)。

字典结构示例:

results = {
    ('CMS', 'LNT'): 0.8500276624334894,
    ('LNT', 'CMS'): 0.8500276624334894,
    ('LOW', 'HD'): 0.8502400376842035,
    ...
}

results_2 = {
    ('CMS', 'CMS'): 1.0,
    ('CMS', 'LNT'): 0.7761431649456381,
    ('CMS', 'LOW'): 0.4476903306386938,
    ...
}

错误代码分析

你提供的代码返回空字典的直接原因是变量名错误:初始化的字典是dict_sorted_2,但内层循环中赋值的是未定义的dict_sorted,导致最终dict_sorted_2始终为空。此外,两层嵌套循环的写法效率极低(时间复杂度O(n*m)),完全没必要。

错误代码片段:

dict_sorted_2 = {}

for key_2, result_2 in results_2.items():
    for key, result in results.items():
        if key_2 == key:
            dict_sorted[key_2] = result_2  # 这里用了未初始化的dict_sorted,而非dict_sorted_2

修正后的实现代码

步骤1:高效获取共同键

利用字典的keys()方法求交集,时间复杂度O(min(n,m)),远优于嵌套循环:

common_keys = results.keys() & results_2.keys()

步骤2:生成包含双值的新字典

由于Python字典不允许重复键,我们将每个共同键对应的值存储为元组(或列表),格式为(results中的值, results_2中的值):

result_combined = {
    key: (results[key], results_2[key]) 
    for key in common_keys
}

步骤3(可选):按值排序

如果需要按照results_2中的值排序,可直接对字典项排序后转换为有序字典(Python 3.7+普通字典也保留插入顺序):

# 按results_2中的值升序排序
sorted_combined = dict(
    sorted(result_combined.items(), key=lambda x: x[1][1])
)

完整示例代码:

# 假设results和results_2已定义
common_keys = results.keys() & results_2.keys()

result_combined = {key: (results[key], results_2[key]) for key in common_keys}
# 按results_2的值排序
sorted_combined = dict(sorted(result_combined.items(), key=lambda x: x[1][1]))

print(sorted_combined)

输出示例(符合字典规则的正确格式):

{
    ('CMS', 'LNT'): (0.8500276624334894, 0.7761431649456381),
    ('LOW', 'HD'): (0.8502400376842035, ...),
    ...
}

额外说明

  • 如果你的业务场景确实需要把两个值分开存储(比如列表形式),可以将元组改为列表[results[key], results_2[key]]。
  • 生成results_2的代码逻辑是正常的,无需修改,只要确保ticker1和ticker2的组合元组与results中的键格式完全一致(比如大小写、顺序)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:46:03