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

Python 如何处理将任意数量的列表解析到字典中,python,pandas,dictionary,namedtuple,Python,Pandas,Dictionary,Namedtuple,我首先将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['modifiedBeg

我首先将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')]) 
因此,两行共享属性
negType
negTrigger
。。。将其分解为插入数据帧的更通用的方法是什么。我曾想过当列表的长度大于1时迭代元素,然后在每次迭代时插入到datframe中,但这看起来很混乱

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

  • 迭代
    否定
    namedtuples
    • 对于
      否定.修饰语中的每一个事物
      
      • 使用否定属性和事物属性添加一行


或者,不要将XML解析为命名字典,而是跳过中间部分,创建一个字典——
{'begin':[row0,row1,…],'end':[row0,row1,…],'negtrigger':[row0,row1,…],'negtype':[row0,row1,…]}
-从XML中我想到了第二个选项。但是,不幸的是,我无法从命名的元组中逃脱,因为这就是我用来从XMI中提取对象的库(dkpro Casis)的工作方式。我需要好好玩玩这个。