我要在两个不同的字典中创建一个加密密钥和一个解密密钥,但是我使用了如下的for循环:
我尝试将相同的问题反过来,我尝试使用值搜索而不是打印键,但对我不起作用
encryptDict = {}
cryptDict = {}
for i in range(len(charList)):
x = random.randint(1,93)
encryptDict.setdefault(charList[i], x)
cryptDict.setdefault(x, charList[i])
我希望两个字典的长度都一样 但我得到的长度却不同。这是一个问题,因为加密是通过字符替换进行的。字符长度为93
答案 0 :(得分:0)
问题是random.randint
可以重复滚动相同的数字,因此对于不同的x
,某些i
将是相同的,而cryptDict
将得到一个为现有密钥分配了新的`carList [i]值,因此最终变得更短。
与其反复使用random.randint
,最好使用random.shuffle
或random.choice
一次一次滚动所有x
,而无需重复,然后迭代这些值。
答案 1 :(得分:0)
您要在1、93范围内随机抽取一个整数,这意味着您可以拥有重复项。您应该随机播放索引。像
# zero based, use 1, len(charList) + 1 for one-based numbering
indices = list(range(len(charList)))
random.shuffle(indices)
encryptDict = dict(zip(charList, indices))
decryptDict = dict(zip(indices, charList))