我想从str。
中找到dict中的所有元素我尝试编写代码,但效果不好。
我考虑使用递归函数。
str = "xx111xxx200x222x"
nums = {"one hundreds": ["100","111"], "two hundreds": ["200", "222"]}
result = []
def allfind(data):
for key in nums.keys():
for num in nums[key]:
index = data.find(num)
if index > -1:
result.append(key)
return allfind(data[index+len(num):])
allfind("xx111xxx200x222x")
print result # return ["two hundreds", "two hundreds"]
# I want to get ["one hundreds", "two hundreds", "two hundreds"]
答案 0 :(得分:1)
你可以做类似的事情(阅读评论):
>>> import re
>>> r = [] # return list
>>> for i in re.split('x+', "xx111xxx200x222x"): # outer loop
... for k in nums: # iterate for each key
... if i in nums[k]: # check if i in list at key
... r.append(k) # if true add in return list
...
>>> r
['one hundreds', 'two hundreds', 'two hundreds']
请注意,在外部循环中,您将迭代以下内容:
>>> re.split('x+', "xx111xxx200x222x")
['', '111', '200', '222', '']
# ^ ^ doesn't exists in dict values.
答案 1 :(得分:1)
我会将字典转换为将所有值作为键,将键作为对应值并使用RegEx suggested by Grijesh Chauhan,这样就可以轻松获取值
nums, my_str = {num:key for key in nums for num in nums[key]}, "xx111xxx200x222x"
import re
print nums
# {'200': 'two hundreds', '100': 'one hundreds', '111': 'one hundreds', '222': 'two hundreds'}
print [nums[item] for item in re.split('x+', my_str) if nums.get(item, "")]
# ['one hundreds', 'two hundreds', 'two hundreds']
答案 2 :(得分:1)
原因是因为你的回答是错误的,因为nums是一本字典而且是无序的,所以,
nums.keys() becomes ['two hundreds', 'one hundreds']
因此,你有两百个作为你的第一个结果,然后当你做
return allfind(data[index+len(num):])
它返回字符串x222x。其中哪一个只有“两百”(222),所以最终结果变成
['two hundreds', 'two hundreds']
当你以正确的顺序迭代nums键时,我认为你可以在知道错误之后做到这个解决方案。 (思考清单)。
另外,尽可能尝试使用简单的打印语句以便于调试。