【发布时间】:2021-07-22 20:31:37
【问题描述】:
我想创建一个名为pieces的值字典,
给定字典的键必须是片段的名称和它的 Unicode 字符表示的项目。
我决定编写一个列表解析来检索 Unicode 字符和一个包含我需要的所有名称的列表。
pieces = dict(zip(['Queen','King','Tower','Bishop','Knight','Pawn']*2,[chr(int(f'265{i:X}',16)) for i in range(4,16)]))
print(pieces)
>> {'Queen': '♚', 'King': '♛', 'Tower': '♜', 'Bishop': '♝', 'Knight': '♞', 'Pawn': '♟'}
我反转了 zip 函数的参数,我得到了:
pieces = dict(zip([chr(int(f'265{i:X}',16)) for i in range(4,16)],['Queen','King','Tower','Bishop','Knight','Pawn']*2))
print(pieces)
>> {'♔': 'Queen', '♕': 'King', '♖': 'Tower', '♗': 'Bishop', '♘': 'Knight', '♙': 'Pawn', '♚': 'Queen', '♛': 'King', '♜': 'Tower', '♝': 'Bishop', '♞': 'Knight', '♟': 'Pawn'}
我无法理解这些输出。起初我认为可能是第二个参数“引导”了字典的大小,所以我调整了名称列表的大小并混合了参数,我得到了以下结果:
pieces = dict(zip([chr(int(f'265{i:X}',16)) for i in range(4,16)],['Queen','King','Tower','Bishop','Knight','Pawn']))
print(pieces)
>> {'♔': 'Queen', '♕': 'King', '♖': 'Tower', '♗': 'Bishop', '♘': 'Knight', '♙': 'Pawn'}
pieces = dict(zip(['Queen','King','Tower','Bishop','Knight','Pawn'],[chr(int(f'265{i:X}',16)) for i in range(4,16)]))
print(pieces)
>> {'♔': 'Queen', '♕': 'King', '♖': 'Tower', '♗': 'Bishop', '♘': 'Knight', '♙': 'Pawn'}
调整尺寸之前:
第一行代码打印第一个列表的 6 个成员和最后一个列表的最后 6 个成员
第二行代码打印第一个列表的所有成员和第二个列表的所有成员
调整大小后:
这两行都打印了两个列表的前 6 个成员
我的问题是:为什么?
至于我的不相信,只能用以下一句话来表达:
??????
【问题讨论】:
-
zip仅处理已通过的最短迭代长度。 docs.python.org/3/library/functions.html#zip -
你想用来自
['Queen','King','Tower','Bishop','Knight','Pawn']*2的键做一个字典 - 但字典键是唯一的,所以它会被更新的对覆盖 -
@h4z3 正如我在 motyzk 回复所说的,我太笨了,我今天应该多喝咖啡!我会将这篇文章保存为我的桌面图像作为警告! :P
标签: python python-3.x dictionary list-comprehension