我需要创建一个具有组件ID及其描述的列表/数据框。我有一个包含组件ID的列表,另一个包含包含组件ID的描述的列表。仅应在两个列表中都具有ID的组件及其说明一起显示。
我尝试使用组件ID列表来精确搜索组件和描述列表。我无法获得所需的输出。
desclist = ['R402 MSG ='4k2 1%'','R403 MSG ='100 1%'','R404 MSG ='4k 1%'']
component = ['R402','R403','R404']
combinedlist = []
while count<(len(component) - 1):
while True:
for c in desclist:
if c in component[count]:
combinedlist.append(c)
print(comp[count]+ ' , ' + desclist[count])
count = count + 1
这不是我尝试过的代码,但是相信与我需要的代码相似,我知道直到在python中都没有循环。
我希望输出为:
R402 , MSG ='4k2 1%'
这将要求我删除描述列表中等于等号之前的所有内容。
答案 0 :(得分:0)
尝试一下
>>> desclist = ['R402 MSG = "4k2 1%"','R403 MSG ="100 1%"','R404 MSG ="4k 1%"', 'R407 MSG ="4k 1%"']
# For test i have added 'R407 MSG ="4k 1%"'
>>> component = ['R402','R403','R404']
输出:
>>> from itertools import chain
>>> new_list = [[desc for desc in desclist if cid in desc] for cid in component]
>>> list(chain(*new_list))
['R402 MSG = "4k2 1%"', 'R403 MSG ="100 1%"', 'R404 MSG ="4k 1%"']
答案 1 :(得分:0)
这是一种简单(易于理解)的方式来满足您的需求!
desclist = ['R402 MSG = Desc402','R403 MSG = Desc403',
'R404 MSG = Desc404','R405 MSG = Desc405']
component = ['R402','R403','R404','R406']
combinedlist = []
for i in range(len(component)):
found = False
for j in range(len(desclist)):
if str(component[i]) == str(desclist[j]).split(' ')[0]:
found = True
combinedlist.append(component[i] + ', ' + desclist[j].split(' ',1)[1])
print(component[i], ',', desclist[j].split(' ',1)[1])
#print('Comp : ', component[i], 'Desc : ', desclist[j].split(' ',1)[1])
break
if not found:
print(component[i], ' not found in Description List')
print('Combined List : ', combinedlist)
输出:
R402 , MSG = Desc402
R403 , MSG = Desc403
R404 , MSG = Desc404
R406 not found in Description List
Combined List : ['R402, MSG = Desc402', 'R403, MSG = Desc403', 'R404, MSG = Desc404']
我已更改了您的描述和组件列表,以涵盖您可能遇到的所有情况。另外,您的描述列表在每个元素中都有多余的引号。如果要将这些引号保留在列表中,则必须使用escape characters。
在组合列表中,如果要删除等号(在描述列表中)之前的所有内容,请使用以下任一选项(取决于描述列表中的所有元素)。
desclist[j].split('=',1)[1]
desclist[j].rpartition('=')[2]