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

String Python-匹配字符串中的字典值&;按字符串顺序打印键,string,python-3.x,dictionary,key,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,但是我希望输出是按字符串中的值匹配顺序

早些时候我问了一个类似的问题,但我还是很难弄明白。我有以下代码:

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的子字符串,然后在临时字典中切换
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

您可以首先将
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
试试这个吧

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)
为了清楚起见,这并不是您想要在这里使用的算法。例如,缺点之一是如果不能保证字符串的一部分将在字典值中,那么循环将永远不会结束。我不想花费精神资源来修复这个潜在的陷阱,因为我有一些阅读要做,但也许你可以找到一个解决方法

编辑,尽管这并不困难,但您应该测试各种边缘情况

试试这个吧

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)
为了清楚起见,这并不是您想要在这里使用的算法。例如,缺点之一是如果不能保证字符串的一部分将在字典值中,那么循环将永远不会结束。我不想花费精神资源来修复这个潜在的陷阱,因为我有一些阅读要做,但也许你可以找到一个解决方法


编辑,尽管这并不困难,但您应该测试各种边缘情况

在python中,不能保证字典是有序的。每次迭代中得到的
j
值都是
10203040
,当连接在一起时,它对应于
karp
,这就为您提供了
karp
在python中字典不保证是有序的。您在每次迭代中得到的
j
值是
10203040
,当连接在一起时,对应于
karp
,这将为您提供
karp
谢谢!但并不是字符串中的所有数字都是2位数,我已经重新编辑了我的问题。好吧,我是根据你提供的答案来回答的。基本上,只有当它是2位数时,根据编辑之前提供的问题,这才有效!对不起,我一开始不清楚,谢谢你的回答谢谢!但并不是字符串中的所有数字都是2位数,我已经重新编辑了我的问题。好吧,我是根据你提供的答案来回答的。基本上,只有当它是2位数时,根据编辑之前提供的问题,这才有效!对不起,我一开始不清楚,谢谢你的回答