在Python中将主列表拆分为多个字典键和值

2024-06-28 19:56:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将一个列表拆分为一个包含多个键和相应值的字典。我不确定这是否可能。但基本上,我试图解析一个列表,并基于某些条件,我想把下面的项放入它们各自的键中

输入列表:

inputlist = ['example line begin','C40 D50','H4000 J30','; condition
1','E40 R50','G009 J56798','RFG50 F400','; condition 2','BG3400
F5600','C40 DH4000 J3F0','C40 D50','; condition 1','T40 R50','G009
J56798','RFG50 F400','condition3....]

预期输出字典:

newDict = {'condition1':['E40 R50','G009 J56798','RFG50
F400'],'condition2':['BG3400 F5600','C40 DH4000 J3F0','C40 D50'],
'condition3':['........}

我还想存储未使用的初始部分。我不知道如何处理这个问题,因为我觉得我需要设置多个标志来打开/关闭

以下是我迄今为止所做的尝试:

ozpattern = re.compile(r";\scondtion1")
outerpattern = re.compile(r";\scondition2")
ozFlag = False
outerFlag = False

for line in inputlist:

    ozmatch = ozpattern.search(line)
    outermatch = outerpattern.search(line)

    if ozmatch:
        ozFlag = True
        ozKey = ''.join(ozmatch[2:].split(' '))
        outerFlag = False

    if ozFlag == True:
        newDict[ozKey].append(line)

    if outermatch:
        outerKey = ''.join(outertempmatch[2:].split(' '))
        ozFlag = False
        outerFlag = True
        continue

    if outertempmatch:
        newDict[outerKey].append(line)

但我被困在这里,因为我需要为这里的几个不同的条件设置标志,这可能会变得乏味。你知道吗


Tags: false列表iflineconditionnewdictd50c40
1条回答
网友
1楼 · 发布于 2024-06-28 19:56:06
import re
inputlist = ['example line begin','C40 D50','H4000 J30','; condition 1','E40 R50','G009 J56798','RFG50 F400','; condition 2','BG3400 F5600','C40 DH4000 J3F0','C40 D50','; condition 3','T40 R50','G009J56798','RFG50 F400']
initialList = []
newDict = {}
key = ''
for i in inputlist:
    m = re.match('; (.*)', i)
    if m:
        key = m.group(1)
    elif key:
        newDict.setdefault(key, []).append(i)
    else:
        initialList.append(i)
print(initialList)
print(newDict)

这将输出:

['example line begin', 'C40 D50', 'H4000 J30']
{'condition 1': ['E40 R50', 'G009 J56798', 'RFG50 F400'], 'condition 2': ['BG3400 F5600', 'C40 DH4000 J3F0', 'C40 D50'], 'condition 3': ['T40 R50', 'G009J56798', 'RFG50 F400']}

相关问题 更多 >