首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >要字典的嵌套列表

要字典的嵌套列表
EN

Stack Overflow用户
提问于 2017-04-05 17:26:26
回答 3查看 9.1K关注 0票数 22

我正在尝试通过嵌套的list创建dict

代码语言:javascript
复制
groups = [['Group1', 'A', 'B'], ['Group2', 'C', 'D']]

L = [{y:x[0] for y in x if y != x[0]} for x in groups]
d = { k: v for d in L for k, v in d.items()}

print (d)
{'B': 'Group1', 'C': 'Group2', 'D': 'Group2', 'A': 'Group1'}

但这看起来有点复杂。

有没有更好的解决方案?

EN

回答 3

Stack Overflow用户

发布于 2017-04-05 17:39:08

我认为一行解决方案有点混乱。我会写如下代码

代码语言:javascript
复制
groups = [['Group1', 'A', 'B'], ['Group2', 'C', 'D']]

result = {}
for group in groups:
    for item in group[1:]:
        result[item] = group[0]
print result
票数 9
EN

Stack Overflow用户

发布于 2017-04-05 18:13:39

这基本上是Willem的一个更漂亮的版本:

代码语言:javascript
复制
>>> groups = [['Group1', 'A', 'B'], ['Group2', 'C', 'D']]
>>> {k:g for g,*tail in groups for k in tail}
{'B': 'Group1', 'A': 'Group1', 'C': 'Group2', 'D': 'Group2'}

但它不能与空列表一起工作:groups = [[],['A','B']]

代码语言:javascript
复制
>>> {k:head for head, *tail in grps for k in tail}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <dictcomp>
ValueError: not enough values to unpack (expected at least 1, got 0)
票数 9
EN

Stack Overflow用户

发布于 2017-04-11 05:11:04

我也喜欢Willem的解决方案,但只是为了完整...

另一个使用itertools和生成器函数的变体(仅限Python 3.x )

代码语言:javascript
复制
def pairs(groups):
    for value,*keys in groups:
        for key_value in zip(keys, itertools.repeat(value)): 
            yield key_value

dict(pairs(groups))
{'A': 'Group1', 'B': 'Group1', 'C': 'Group2', 'D': 'Group2'}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43227103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档