字典的长度不一样

时间:2019-05-05 12:53:56

标签: python python-3.x dictionary

我要在两个不同的字典中创建一个加密密钥和一个解密密钥,但是我使用了如下的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

2 个答案:

答案 0 :(得分:0)

问题是random.randint可以重复滚动相同的数字,因此对于不同的x,某些i将是相同的,而cryptDict将得到一个为现有密钥分配了新的`carList [i]值,因此最终变得更短。

与其反复使用random.randint,最好使用random.shufflerandom.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))