我早些时候问过类似的问题,但我仍然很难搞清楚这一点。我有以下代码:
d = {'k' : '10', 'a' : '20', 'r' : '30', 'p' : '401'}
string = '401203010'
text = ''
for i, j in d.items():
if j in string:
text += i
print(text) #prints karp
所需的输出:park
我得到的输出是karp
,但是我希望输出符合字符串中的值匹配顺序,谢谢!
答案 0 :(得分:1)
您可以先将string
拆分为2的子字符串,然后在临时字典中切换d
的键广告值,然后只需添加其中的值:
d = {'k' : '10', 'a' : '20', 'r' : '30', 'p' : '40'}
string = '40203010'
text = ''
split_string = [string[i:i+2] for i in range(0, len(string), 2)]
# ['40', '20', '30', '10']
new_dict = dict((y,x) for x,y in d.items())
# {'30': 'r', '10': 'k', '20': 'a', '40': 'p'}
text = "".join(new_dict[string] for string in split_string)
print(text)
# park
答案 1 :(得分:1)
试试这个吗?
d = {'k' : '10', 'a' : '20', 'r' : '30', 'p' : '40'}
string = '40203010'
text = ''
keylen = len(''.join(d.keys()))
while len(text) != keylen:
found_val = 0
for i, j in d.items():
jl = len(j)
if string[:jl] == j:
text += i
string = string[jl:]
found_val += 1
if found_val == 0:
break
print(text)
为了清楚起见,这实际上不是你想在这里使用的算法。例如,其中一个缺点是,如果不保证字符串的一部分将在字典值中,那么循环将永远不会结束。我不想花费精力资源来解决这个潜在的陷阱,因为我有一些阅读要做,但也许你可以找到解决方法。
编辑,不要紧,不是那么困难,但你应该测试各种边缘情况。