首页 > 解决方案 > 从具有不同顺序的列表创建字典

问题描述

假设我有一个如下所示的列表:

[[('name', 'n1')], [('value', 'v1')], [('name', 'n2')], [('value', 'v2')], [('name', 'n3')], [('value', 'v3')]]

我能够运行res = dict((str(x[0][1]), y[0][1]) for x, y in zip(new[::2], new[1::2]))where resthen equals {'n1':'v1', 'n2':'v2', 'n3':'v3'},这正是我在这种情况下想要的。当名称和值交替出现时就是这种情况。

但是,我也有一些看起来像这样的列表:

[[('name', 'n1')], [('name', 'n2')], [('name', 'n3')], [('value', 'v1')], [('value', 'v2')], [('value', 'v3')]]

在这里,我有名称、名称、名称,然后是相应的值、值、值。在这种情况下,我希望得到与res上面相同的字典,但我的代码在这种情况下无法正常工作。

有没有一种方法可以涵盖这两种情况来创建一个将名称映射到相应值的字典?(仅供参考:每次可能不会有三个,可能更多/更少)。

标签: pythonlistdictionarytuples

解决方案


这是一个可能的单行解决方案(lst是您的输入列表):

res = dict(zip([el[0][1] for el in lst if el[0][0] == 'name'],
               [el[0][1] for el in lst if el[0][0] == 'value']))

推荐阅读