我有以下字典:
clues = {'A': '#', 'N': '%', 'M': '*'}
我还有以下列表:
puzzle = ['#+/084&"', '#3w#%#+', '8%203*','']
如何使用“线索”中的键替换列表中的项目(例如,通过引用“线索”中的值)#39; clues'所以它现在会出现以下方式:
puzzle = ['A+/084&"', 'A3wANA+', '8N203M','']
答案 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', '']