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

时间:2014-03-22 17:56:23

标签: python string list

我有以下字典:

clues = {'A': '#', 'N': '%', 'M': '*'}

我还有以下列表:

puzzle = ['#+/084&"', '#3w#%#+', '8%203*','']

如何使用“线索”中的键替换列表中的项目(例如,通过引用“线索”中的值)#39; clues'所以它现在会出现以下方式:

puzzle = ['A+/084&"', 'A3wANA+', '8N203M','']

3 个答案:

答案 0 :(得分:5)

从词典中创建翻译地图,然后使用str.translate()

try:
    # Python 3
    maketrans = str.maketrans
except AttributeError:
    # Python 2
    from string import maketrans

m = maketrans(''.join(clues.values()), ''.join(clues))
result = [s.translate(m) for s in puzzle]

这确实假设clues中的值是唯一的。到目前为止,str.translate()是将单个字符映射到其他单个字符的最快方法。

演示(使用Python 2.7):

>>> from string import maketrans
>>> clues = {'A': '#', 'N': '%', 'M': '*'}
>>> puzzle = ['#+/084&"', '#3w#%#+', '8%203*', '']
>>> m = maketrans(''.join(clues.values()), ''.join(clues))
>>> [s.translate(m) for s in puzzle]
['A+/084&"', 'A3wANA+', '8N203M', '']

答案 1 :(得分:1)

puzzle = ['#+/084&"', '#3w#%#+', '8%203*','']
clues = {'A': '#', 'N': '%', 'M': '*'}
answer = []
for p in puzzle:
    for dest,src in clues.items():
        p = p.replace(src,dest)
    answer.append(d)

答案 2 :(得分:1)

你可以这样做:

for key, value in clues.iteritems():
    puzzle = [ a.replace(value,key) for a in puzzle]

测试它:

>>> clues = {'A': '#', 'N': '%', 'M': '*'}
>>> puzzle = ['#+/084&"', '#3w#%#+', '8%203*','']
>>> for key, value in clues.iteritems():
...     puzzle = [ a.replace(value,key) for a in puzzle]
...
>>> puzzle
['A+/084&"', 'A3wANA+', '8N203M', '']