如何从str中找到所有元素

时间:2014-03-20 03:44:57

标签: python

我想从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"]

3 个答案:

答案 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键时,我认为你可以在知道错误之后做到这个解决方案。 (思考清单)。

另外,尽可能尝试使用简单的打印语句以便于调试。