我想创建一个名为《片段》的价值字典
给定词典的键必须是片段的名称和项目,它是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个成员
我的问题是:为什么
至于我的怀疑,我只能用以下的话来表达:
🤷
一个
dict
只能有唯一的键。如果您多次给它相同的键,它只会“记住”最后一个值。以前的值将被覆盖值得一提的是
zip
将在Python3.10(https://www.python.org/dev/peps/pep-0618/)上获得一个长度检查标志,这将允许在给定给zip
的列表大小不同时引发错误。我想这有助于检查此类案件如果在python中创建一个具有重复键的
dict
,则生成的dict将具有与最后一个给定值关联的键:这是一个非常有用的功能
名单如下:
是白色的,然后是黑色的,代表12个唯一的值
使用
['Queen','King','Tower','Bishop','Knight','Pawn']*2
不能区分白色和黑色,这只表示6个唯一的值所以当你这样做的时候:
您可以看到,创建的dict将更新第一个给定值(白色部分的符号),以表示第二个给定值(黑色部分)
所以你应该:
(或者让列表文字为12个唯一值…)
然后你会得到代表棋盘上12个棋子的唯一值
您也可以懒惰,使用Python库告诉您什么是什么:
然后显示
['Queen','King','Tower','Bishop','Knight','Pawn']
的原始列表文字反转了皇后和国王然后,它在两个方面都能正常工作:
相关问题 更多 >
编程相关推荐