python - 从具有不同顺序的列表创建字典
问题描述
假设我有一个如下所示的列表:
[[('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 res
then equals
{'n1':'v1', 'n2':'v2', 'n3':'v3'}
,这正是我在这种情况下想要的。当名称和值交替出现时就是这种情况。
但是,我也有一些看起来像这样的列表:
[[('name', 'n1')], [('name', 'n2')], [('name', 'n3')], [('value', 'v1')], [('value', 'v2')], [('value', 'v3')]]
在这里,我有名称、名称、名称,然后是相应的值、值、值。在这种情况下,我希望得到与res
上面相同的字典,但我的代码在这种情况下无法正常工作。
有没有一种方法可以涵盖这两种情况来创建一个将名称映射到相应值的字典?(仅供参考:每次可能不会有三个,可能更多/更少)。
解决方案
这是一个可能的单行解决方案(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']))
推荐阅读
- python - 如何使用 random.choice() 执行多项随机选择?
- android - 从视图中请求相机权限
- javascript - 如何避免每次调用一个方法
- java - 我需要使用 AID 从一个类中访问一个值
- javascript - 创建带有时区的 javascript 日期
- java - 如何在不转换为二进制字符串的情况下计算汉明码?
- java - 为什么 ObjectMapper.writeValueAsString() 在低驼峰情况下插入具有原始属性的奇数属性?
- c# - 从 IdentityServer4 中的 ChallengeResult() 发出新的声明
- arrays - 将较小的矩阵索引到较大矩阵的中心
- angular - Angular 2选中的单选按钮ngModel