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

如何将嵌套字典对比的循环代码改写为列表推导式或更易读形式

问题解答

1. 列表推导式改写版本

你的现有逻辑可以直接改写为等价的列表推导式,写法如下:

L = [
    v3["range"]
    for k, v in dict1.items()
    for k2, v2 in dict2.items()
    if k == k2
    for k4, v4 in v.items()
    for k3, v3 in v2.items()
    if k4 == k3
]

注意:原逻辑是严格匹配键的大小写,所以示例中dict1的小写color、blue和dict2的大写Color、Blue不会匹配到,仅能匹配到Texture下的actual、simulated两个键对应的range值。如果需要忽略大小写匹配,把判断条件改为k.lower() == k2.lower()、k4.lower() == k3.lower()即可。

2. 更易理解的优化实现

你原有代码嵌套了四层循环,需要全量遍历dict2的所有键,效率很低可读性也差,完全可以利用字典的O(1)键查找特性优化,优化后逻辑更直观,执行效率也更高:

L = []
for parent_key, child_dict in dict1.items():
    # 直接判断父级键是否存在于dict2,无需遍历全量dict2
    if parent_key not in dict2:
        continue
    dict2_parent_node = dict2[parent_key]
    for child_key in child_dict:
        # 直接判断子级键是否存在于dict2对应父节点下,无需遍历全量子节点
        if child_key in dict2_parent_node:
            L.append(dict2_parent_node[child_key]["range"])

如果想要兼顾简洁性和可读性,也可以把优化后的逻辑改写为列表推导式:

L = [
    dict2[parent_key][child_key]["range"]
    for parent_key, child_dict in dict1.items()
    if parent_key in dict2
    for child_key in child_dict
    if child_key in dict2[parent_key]
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:30:00