python使用字典替换字符串列表中的字符

时间:2013-06-27 14:39:39

标签: python dictionary replace

我正在尝试创建一个代码破解游戏,其中用户将字符/字母对提交到字典以破解代码,然后我希望代码使用字典用配对字母替换符号的每个实例。

我有以下几段代码:

words = imported list of coded words where each letter is replaced by a symbol. from a text file so i can change later
clues = dictionary of symbol and letter pairs that can be added to, removed from

我尝试了以下操作,但失败了:TypeError: list indices must be integers, not str

def converter(words,clues):

    progression = words


    for words in progression:#cycles through each coded word in the list
        for key in clues: #for each symbol in the dictionary
            progression[words] = progression[words].replace(key, clues[key]) #replaces


    return progression

任何人都可以提供任何帮助我将非常感激。

亚当

2 个答案:

答案 0 :(得分:2)

progression是一个列表。要从中访问内容,您需要使用索引值,它是一个整数,而不是字符串,因此错误。

你可能想要:

for i, j in enumerate(words):
    words[i] = clues.get(j)

枚举的作用是遍历单词列表,其中i是索引值,j是内容。 .get()dict['key']类似,但如果未找到密钥,则返回None而不是引发错误。

然后words[i]使用单词的索引号

修改列表

答案 1 :(得分:1)

Haidro解释得很好,但我想我会扩展他的代码,并解决另一个问题。

首先,正如Inbar Rose指出的那样,你的命名惯例很糟糕。它使代码更难以阅读,调试和维护。选择简洁的描述性名称,并确保遵循PEP-8。避免为不同的事物重复使用相同的变量名,尤其是在同一范围内。

现在,代码:

words = ['Super', 'Random', 'List']
clues = {'R': 'S', 'd': 'r', 'a': 'e', 'o': 'e', 'm': 't', 'n': 'c'}


def decrypter(words, clues):

    progression = words[:]

    for i, word in enumerate(progression):
        for key in clues:
            progression[i] = progression[i].replace(key, clues.get(key))

    return progression

现在替换progression[i]内容中的字符,而不是使用progression[i]中的密钥替换clues

此外,将progression = words更改为progression = words[:]以创建要执行的列表副本。您传入对单词的引用,然后将相同的引用分配给进度。当您操纵progression时,操纵words,在这种情况下渲染progression无用。

使用示例:

print words
print decrypter(words, clues)
print words

使用progression = words输出:

  

['超级','随机','列表']
  ['超级','秘密','名单']
  ['超级','秘密','列表']

使用progression = words[:]输出:

  

['超级','随机','列表']
  ['超级','秘密','名单']
  ['超级','随机','列表']