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
相关产品推荐
相关产品推荐

