Python - 匹配字符串和字典中的字典值按字符串顺序打印键

时间:2017-12-03 02:03:02

标签: string python-3.x dictionary key

我早些时候问过类似的问题,但我仍然很难搞清楚这一点。我有以下代码:

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,但是我希望输出符合字符串中的值匹配顺序,谢谢!

2 个答案:

答案 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)

为了清楚起见,这实际上不是你想在这里使用的算法。例如,其中一个缺点是,如果不保证字符串的一部分将在字典值中,那么循环将永远不会结束。我不想花费精力资源来解决这个潜在的陷阱,因为我有一些阅读要做,但也许你可以找到解决方法。

编辑,不要紧,不是那么困难,但你应该测试各种边缘情况。