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

Python如何从主字典取值赋值给笛卡尔积生成的新字典

实现方案

dict.fromkeys()仅支持为所有键设置统一初始值,无法按键的类型匹配对应棋子数量,直接使用字典推导式遍历颜色、棋子类型的笛卡尔积,按棋子类型从theBoard['pieces']中取对应数量作为值即可,无需先生成空值字典再二次赋值。

完整代码

import itertools

theBoard = {
    "pieces": {"pawn": 8, "knight": 2, "bishop": 2, "rook": 2, "queen": 1, "king": 1},
    "color": ["w", "b"],
    "height": ["a", "b", "c", "d", "e", "f", "g", "h"],
    "width": ['1', '2', '3', '4', '5', '6', '7', '8']
}

tot_pieces = {
    f"{color}{piece}": theBoard["pieces"][piece]
    for color, piece in itertools.product(theBoard["color"], theBoard["pieces"])
}

生成结果

运行后得到的tot_pieces完全符合需求,键为颜色+棋子类型的组合,值为对应棋子的标准数量:

{
    'wpawn': 8, 'wknight': 2, 'wbishop': 2, 'wrook': 2, 'wqueen': 1, 'wking': 1,
    'bpawn': 8, 'bknight': 2, 'bbishop': 2, 'brook': 2, 'bqueen': 1, 'bking': 1
}

兼容已有空字典的写法

如果要保留你之前生成空值tot_pieces的逻辑,只需要追加一段遍历赋值的代码即可:

for key in tot_pieces:
    # 键首字符为颜色标识,第二位开始为棋子类型名
    tot_pieces[key] = theBoard["pieces"][key[1:]]

注意:调用itertools相关方法前必须先执行import itertools导入依赖,否则会触发名称错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:57:06