gpt4 book ai didi

python - 如何使用字典扫描列表中的部分外观?

转载 作者:行者123 更新时间:2023-12-01 01:09:53 25 4
gpt4 key购买 nike

我正在尝试使用字典来扫描字符串列表,看看它是否出现在字符串中,例如,假设我有一个字典 {'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 并解释为什么之前的方法不起作用。

谢谢本

最佳答案

从您在这里的评论来看,在我看来,组件列表中的字符 'C' 很重要,因为您似乎想要区分 'C11'示例和'C1'

顺便说一句,我完全同意 @martineau 始终在 python 中使用标准命名。 CamleCasingLikeThis 应该只为类名保留,并且一般情况下应该对变量使用 lower_case_like_this,而不是大写。

让我们来看看如何做到这一点。

my_dict = {'C99': 1, 'C15': 1, 'C1': 1}
component_list = ['C1C15C99', 'C15', 'C17']

result = []

# first convert my_dict to a list of numbers ['99', '15', '1']
elements = [element[1:] for element in my_dict.keys()]

# for every component you want to characterize
for component in component_list:

# a flag to know if we found any element in this component
found = False

# split the string by the 'C' character to get its sub element numbers
# for example 'C1C15C99'.split('C') == ['', '1', '15', '99']
for sub_elem in component.split('C'):

# make sure sub_elem is not an empty string
if sub_elem:

# check if this sub element exists in elements
if sub_elem in elements:

found = True

# exit the inner loop
break

# convert the boolean to int (either 0 or 1)
# and finally add this to the result
result.append(int(found))

print(result)
# [1, 1, 0]
<小时/>

到目前为止,我一直假设 my_dict 只能采用单个组件(如 C1 或 C6),但不能采用复合组件(如 C12C14)。来自您的最新comment ,看来情况并非如此。另外两件事突然变得清晰起来:my_dict 可以包含组件的组合,并且在检查其中一个组件是否存在时,顺序并不重要。例如,C1C2 确实存在于 C5C2C7C1 中,但 C1C2 存在于 C1 中,因为两个子组件都必须存在。

这非常重要,它完全改变了问题。为了供将来引用,请确保从一开始就详细描述您的问题。

my_dict = {'C99': 1, 'C15': 1, 'C1': 1, 'C1C55C99': 1, 'C99C6': 1, 'C2C4C18': 1}
component_list = ['C1C15C99', 'C15', 'C17', 'C8C6C80C99', 'C6', 'C55C2C4C18C7', 'C55C1', 'C18C4']

result = []

# first convert my_dict to a list of lists containing singular elements
elements = [element.split('C')[1:] for element in my_dict.keys()]
# elements = [['2', '4', '18'], ['99'], ['1'], ['15'], ['99', '6'], ['1', '55', '99']]

for component in component_list:

found = False

# gather the sub elements for this components
comp_elements = component.split('C')[1:]

for composite_element in elements:

element_exists = True

# check if every singular element in this element is present in component
for signular_element in composite_element:

if signular_element not in comp_elements:
element_exists = False
break

if element_exists:
found = True
break

result.append(int(found))

print(result)
# [1, 1, 0, 1, 0, 1, 1, 0]

关于python - 如何使用字典扫描列表中的部分外观?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54963906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com