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

能否在列表推导式中保存迭代变量值并实现字典关联列表合并?

列表推导式实现字典关联更新需求

问题

有没有办法在列表推导式中保存迭代变量的值?

以这个字典为例:

d = {
  1: ["a", "b"],
  2: ["c", "d"],
  3: ["e", 1]
}

想要实现的逻辑是:遍历字典的每个键i,如果i存在于任意值列表中,就将i对应的值列表添加到包含i的那个值列表里。用普通循环的逻辑示意如下:

for i in d:
    if any(i in j for j in d.values()):
        # 将i对应的值列表添加到包含i的那个列表中

执行后期望字典变为:

d = {
  1: ["a", "b"],
  2: ["c", "d"],
  3: ["e", 1, "a", "b"]
}

已知嵌套for循环可以实现,能否通过列表推导式完成这个需求?

解答

可以通过字典推导式结合列表推导式直接实现,不需要额外预处理步骤,代码简洁且符合需求:

d = {
    k: v + [item for i in v if i in d for item in d[i]]
    for k, v in d.items()
}

逻辑说明

  • 外层是字典推导式,遍历原字典的每个键值对(k, v);
  • 内层的列表推导式[item for i in v if i in d for item in d[i]]:
    1. 遍历当前值列表v中的每个元素i;
    2. 判断i是否是原字典的键(确保d[i]存在);
    3. 如果是,就把d[i]中的所有元素展开添加到新列表中;
  • 最后将原列表v和生成的追加列表拼接,作为新字典中键k对应的值。

执行这段代码后,原字典会直接更新为期望的结果:键3的值列表会追加键1对应的["a", "b"],其他键的值保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:35:26