python:根据行数的属性值创建字典

2024-05-13 21:51:01 发布

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

我在一个.xml文件中有以下10行:

<EmpInfo Location="Pune" Name="John">
<EmpInfo>
<EmpInfo Location="Pune" Name="Sam">
<EmpInfo>
<EmpInfo Location="Pune" Name="George">
<EmpInfo>
<EmpInfo Location="Mumbai" Name="Sera">
<EmpInfo>
<EmpInfo Location="Delhi" Name="Jon">
<EmpInfo>
<EmpInfo Location="Mumbai" Name="Josh">
<EmpInfo>
<EmpInfo Location="Pune" Name="Alex">
<EmpInfo>
<EmpInfo Location="Mumbai" Name="Lee">
<EmpInfo>
<EmpInfo Location="Delhi" Name="Ron">
<EmpInfo>
<EmpInfo Location="Mumbai" Name="Sara">
<EmpInfo>

我试过这样做。。但它不起作用:

counter=0
infoDict={}
pointers = header.getElementsByTagName('EmpInfo')
for pointer in pointers:
    namelist=[]
    pointerobj={}
    if counter==0:
        name=pointer.getAttribute("Location")        
        basename=pointer.getAttribute("Name")
        namelist.append(name)
        basenamelist.append(basename)            
    else:
        basename=pointer.getAttribute("Location")
        if pointer.getAttribute("Location") in basenamelist:
            name=pointer.getAttribute("Name")

            namelist.append(name)
        else:
            name=pointer.getAttribute("Name")
        namelist.append(name)
    #basenamelist.append(basename)
    print("Location:: ",basename)
    print("Name:: ",namelist)
    counter=counter+1
infoDict.update({basename:namelist})

我希望结果打印在字典中,如:

infoDict = {
    Pune : [John,Sam,George,Alex],
    Mumbai : [Sera,Josh,Lee,Sara],
    Delhi : [Jon,Ron]
}

我试图在mongoDB中插入这个结果。 在字典中,键必须是位置,值应该是数组。 我的实际应用程序很长,但我想先在其中完成这个小模块


Tags: namecounterlocationappendpointerdelhibasenamenamelist
1条回答
网友
1楼 · 发布于 2024-05-13 21:51:01

下面是一段代码,使用re表示正则表达式,使用pandas表示数据管理(使用名为my_file.txt的文件替换为您的文件名):

import pandas as pd
with open("my_file.txt", 'r') as f:
    file_str = f.read()
    tuples = re.findall('<EmpInfo Location="([A-Za-z]+)" Name="([A-Za-z]+)">',file_str)
    df = pd.DataFrame(tuples )
    df_grouped = df.groupby(0,sort=False)[1].apply(lambda x: list(x))
df_grouped 
#0
#Pune      [John, Sam, George, Alex]
#Mumbai      [Sera, Josh, Lee, Sara]
#Delhi                    [Jon, Ron]
#Name: 1, dtype: object

或者,如果您愿意,可以选择两行:

import pandas as pd
with open("my_file.txt", 'r') as f:
    df_grouped = pd.DataFrame(re.findall('<EmpInfo Location="([A-Za-z]+)" Name="([A-Za-z]+)">',f.read())).groupby(0,sort=False)[1].apply(lambda x: list(x))

对于某些花式打印(您可以write it into a new file代替打印):

for idx, row in df_grouped.T.iteritems():
    print(f"{idx} : [{','.join(row)}]")
#Pune : [John,Sam,George,Alex]
#Mumbai : [Sera,Josh,Lee,Sara]
#Delhi : [Jon,Ron]

相关问题 更多 >