【发布时间】:2019-03-02 23:02:32
【问题描述】:
我正在尝试使用字典来扫描字符串列表以查看它是否出现在字符串中,例如假设我有一个 {'C99':1, 'C4':1} 字典['C99C2C3C5', 'C88C4'] 的列表,那么新列表将是 ['1','1'] 因为 'C99' 出现在字符串 'C99C2C3C4' 中,而 'C4' 出现在 'C88C4' 中。
我目前的做法是:
import re
dict = {'C99': 1,'C15':1}
ComponentList = ['C1C15C99', 'C15', 'C17']
def func(s):
for k, v in dict.items():
if all(i in s for i in re.findall('\w\d', k)):
return v
else:
return 0
ComponentList = [func(i) for i in ComponentList]
输出:
[1, 1, 1]
想要的输出:
[1,1,0]
为了澄清,如果这是我的系统:
my_dict = {'C1C55C99': 1, 'C17': 1, 'C3': 1}
component_list = ['C1C15C55C99', 'C15', 'C17']
因为“C1C55C99”出现在“C1C15C55C99”中,我希望将值更改为字典值以提供输出:
results = ['1','0','1']
但是,当组件编号超过 C9 时,此方法不起作用,希望有人可以帮助我修复,因此它可以用于 Cx,并解释为什么以前的方法不起作用。
谢谢本
【问题讨论】:
-
你的字典真的叫
dict吗?这是一个 Python 内置的,所以我会注意不要将它用作变量名。 -
我也看不出在你的代码中使用正则表达式的真正目的。你不能检查
if k in s:吗? -
这个问题有歧义。如果
dict = ['A': 1, 'B': 1, 'C': 2, 'D': 3]并且您的列表是['A', 'AA', 'AB', 'AC', 'ABC', 'ABCD'],输出应该是什么? -
嗨,使用 if 'k in s:' 的问题是如果 {'C1':1} 在我的字典中,那么如果列表包含 ['C19'] 它仍然会更改 C19为 1,因为 C1(来自字典)出现在 ['C19'] 中。有什么办法可以规避吗?
-
字典值总是 1 所以如果我有一个 dict = ['A': 1, 'B': 1, 'C': 1, 'D': 1] 流行列表将是 [0,0,0,0,0,0]
标签: python arrays python-3.x string list