如何处理将任意数量的列表解析成字典

问题描述 投票:-1回答:1

我正在通过首先将XMI / XML数据结构分解为字典来将其解析为熊猫数据框。当我在XMI的列表中遇到一个命名的元组时,列表中似乎最多有两个命名的元组(尽管大多数只有一个)。

为了处理这种情况,我正在执行以下操作:

if val is not None and val:
    if len(val) == 1:
        d['modifiedBegin'] = val[0].begin
        d['modifiedEnd'] = val[0].end
        d['modifiedBegin1'] = None
        d['modifiedEnd1'] = None
    else:
        d['modifiedBegin1'] = val[1].begin
        d['modifiedEnd1'] = val[1].end

我与此有关的问题是:a)我不能保证我要分解的清单中只有两个清单,并且b)感觉便宜,丑陋,只是明显的错误!

我真的很想提出一个更通用的解决方案,尤其是上面给出的a)。

我的数据如下:

val = [Span(xmiID=105682, begin=13352, end=13358, type='org.metamap.uima.ts.Span'), Span(xmiID=105685, begin=13368, end=13374, type='org.metamap.uima.ts.Span')]

我真的更愿意将其解析为数据帧中的两个独立行,而不是拥有更多列。主要问题是这两个元组都共享来自一个较大对象的公共数据,该对象看起来像:

Negation(xmiID=142613, id=None, negType='nega', negTrigger='without', modifier=[Span(xmiID=105682, begin=13352, end=13358, type='org.metamap.uima.ts.Span'), Span(xmiID=105685, begin=13368, end=13374, type='org.metamap.uima.ts.Span')]) 

因此,两行共享属性negTypenegTrigger ...什么是将其分解为插入到我的数据框中的更通用的方法。我虽然会在列表的长度大于1时对元素进行迭代,然后在每次迭代时将其插入到datframe中,但这似乎很麻烦。

因此,我期望的结果是拥有一个看起来像(减去索引和其他常见垃圾的数据框):

enter image description here

python pandas dictionary namedtuple
1个回答
0
投票
  • 迭代Negation namedtuple
    • [negation.modifier中的每件事
      • 使用否定属性和事物属性添加一行

或者不是将XML解析为namedtuple的字典,而是跳过中间部分并创建一个字典-{'begin':[row0,row1,...],'end':[row0,row1,...],'negtrigger':[row0,row1,...],'negtype':[row0,row1,...]}-来自XML

© www.soinside.com 2019 - 2024. All rights reserved.