如何从 s 中找到所有元素

2024-09-20 22:52:26 发布

您现在位置: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"]

Tags: keyinfordataindexreturnresultone
3条回答

我会将字典转换为将所有值作为键,并将键作为相应的值,使用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']

你可以这样做(阅读评论):

>>> 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.   

你得到错误答案的原因是因为nums是一本字典,而且是无序的,所以

nums.keys() becomes ['two hundreds', 'one hundreds']

因此,你有两个几百作为你的第一个结果,然后当你这样做

return allfind(data[index+len(num):])

它返回字符串x222x,当然它只有“两百”(222),所以最终结果变成

['two hundreds', 'two hundreds']

解决方案,我认为您可以在知道错误后执行,应该在您以正确的顺序迭代nums键时出现。(思考清单)。你知道吗

另外,尽可能地放置简单的print语句以便于调试。你知道吗

相关问题 更多 >

    热门问题