将keysquare中的指针替换为字符串中的字母



我有这个密钥平方:

keysquare = {'?': 'AA', '?': 'AD', '?': 'AF', '?': 'AG', '?': 'AV', '?': 'AX',
'?': 'DA', '?': 'DD', '?': 'DF', '?': 'DG', '?': 'DV', '?': 'DX',
'?': 'FA', '?': 'FD', '?': 'FF', '?': 'FG', '?': 'FV', '?': 'FX',
'?': 'GA', '?': 'GD', '?': 'GF', '?': 'GG', '?': 'GV', '?': 'GX',
'?': 'VA', '?': 'VD', '?': 'VF', '?': 'VG', '?': 'VV', '?': 'VX',
'?': 'XA', '?': 'XD', '?': 'XF', '?': 'XG', '?': 'XV', '?': 'XX'}

我想要的是用后面的字符串ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890替换每个?,如果可能的话,一个字母接一个字母。

像第一个?=A,第二个?=B等…

以下是使用itertools.productzip的解决方案:

from itertools import product
keys = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
values = [''.join(_) for _ in product('ADFGVX', 'ADFGVX')]
kv = dict(zip(keys, values))
print(kv)

上面的代码将为您提供以下输出(由我格式化以提高可见性(:

{'A': 'AA', 'B': 'AD', 'C': 'AF', 'D': 'AG', 'E': 'AV', 'F': 'AX',
'G': 'DA', 'H': 'DD', 'I': 'DF', 'J': 'DG', 'K': 'DV', 'L': 'DX',
'M': 'FA', 'N': 'FD', 'O': 'FF', 'P': 'FG', 'Q': 'FV', 'R': 'FX',
'S': 'GA', 'T': 'GD', 'U': 'GF', 'V': 'GG', 'W': 'GV', 'X': 'GX',
'Y': 'VA', 'Z': 'VD', '1': 'VF', '2': 'VG', '3': 'VV', '4': 'VX',
'5': 'XA', '6': 'XD', '7': 'XF', '8': 'XG', '9': 'XV', '0': 'XX'}

你甚至可以用这样的东西只需一步:

from itertools import product
kv = dict(
zip(
'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',
(''.join(_) for _ in product('ADFGVX', 'ADFGVX'))
)
)

您所拥有的不是一个有效的字典,因为它有重复的键";。然而,如果你有一个翻转了键和值的字典,你可以这样做(假设dict中的顺序被保留(

# remember to create a valid dict
# keysquare = {'AA': '?', 'AD': '?' ...}
keys = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
len_keys = len(keys)
new_keysquare = {keysquare[key]: keys[i % len_keys] for i, key in enumerate(keysquare)}
print(new_keysquare)

最新更新