首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:使用嵌套列表中的多个值从元组键中生成一个dict

Python:使用嵌套列表中的多个值从元组键中生成一个dict
EN

Stack Overflow用户
提问于 2013-10-30 07:13:29
回答 3查看 2.4K关注 0票数 2

我是python的新手,我正尝试用元组作为键和嵌套列表作为多个值来制作一个字典。

列表嵌套在三胞胎中;[[[Isolation source],[host],[country]]...etc]

例子如下:

代码语言:javascript
复制
value_list = [[['NaN'], ['sponge'], ['Palau']], [['skin'], ['fish'], ['Cuba']], [['claw'], ['crab'], ['Japan: Aomori, Natsudomari peninsula']]....]

和钥匙的元组;

key_tuple = ('AB479448', 'AB479449', 'AB602436',...)

因此,我希望输出结果像这样;

代码语言:javascript
复制
dict = {'AB479448': [NaN, sponge, Palau], 'AB479449': [skin, fish, Cuba], 'AB602436': [claw, crab, Japan: Aomori, Natsudomari peninsula]

我尝试了几种不同的解决方案,但不是说我能成功.例如,词典理解;

代码语言:javascript
复制
dict = { i: value_list for i in key_tuple }

上面给了我这个(使用不同的键,但将相同的值关联到每个键);

代码语言:javascript
复制
{'AB479448': [[[NaN, sponge, Palau]]], 'AB479449': [[[NaN, sponge, Palau]]], 'AB602436': [[[NaN, sponge, Palau]]]...etc..}

会感谢任何指点..。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-30 07:18:23

您可以使用itertools.chain.from_iterableitertools.izip (或zip)和dict理解:

代码语言:javascript
复制
>>> from itertools import chain, izip
>>> value_list = [[['NaN'], ['sponge'], ['Palau']], [['skin'], ['fish'], ['Cuba']], [['claw'], ['crab'], ['Japan: Aomori, Natsudomari peninsula']]]
>>> key_tuple = ('AB479448', 'AB479449', 'AB602436')
>>> {k: list(chain.from_iterable(v)) for k, v in izip(key_tuple, value_list)}
{'AB479449': ['skin', 'fish', 'Cuba'],
 'AB479448': ['NaN', 'sponge', 'Palau'],
 'AB602436': ['claw', 'crab', 'Japan: Aomori, Natsudomari peninsula']}
票数 7
EN

Stack Overflow用户

发布于 2013-10-30 07:28:31

使用zipiter,您可以创建所需的输出字典,如下所示

代码语言:javascript
复制
value_list = [[['NaN'], ['sponge'], ['Palau']], [['skin'], ['fish'], ['Cuba']], [['claw'], ['crab'], ['Japan: Aomori, Natsudomari peninsula']]]
key_tuple = ('AB479448', 'AB479449', 'AB602436')

dict( (key,[[list(value)]]) for key,value in zip(key_tuple, zip(*(iter(t[0] for v in value_list for t in v),)*3)))

Out[16]: {'AB479448': [[['NaN', 'sponge', 'Palau']]], 'AB479449': [[['skin', 'fish', 'Cuba']]],'AB602436': [[['claw', 'crab', 'Japan: Aomori, Natsudomari peninsula']]]}

如果列表键中所需的元素数量发生变化,则可以将3替换为新的长度值。

做这个真的很有趣。

票数 1
EN

Stack Overflow用户

发布于 2013-10-30 07:32:41

下面是使用itertools.chain.from_iterable和字典理解的解决方案:

代码语言:javascript
复制
from itertools import chain
{keys[i]:list(chain.from_iterable(contents)) for i, contents in enumerate(my_list)}

这等于:

代码语言:javascript
复制
from itertools import chain
for i, contents in enumerate(my_list): #get [['skin'], ['fish'], ['Cuba']]
    result[keys[i]] = list(chain.from_iterable(contents))

Demo

代码语言:javascript
复制
>>> from itertools import chain
>>> my_list = [[['NaN'], ['sponge'], ['Palau']], [['skin'], ['fish'], ['Cuba']], [['claw'], ['crab'], ['Japan: Aomori, Natsudomari peninsula']]]
>>> keys = ('AB479448', 'AB479449', 'AB602436')
>>> {keys[i]:list(chain.from_iterable(contents)) for i, contents in enumerate(my_list)}
{'AB479449': ['skin', 'fish', 'Cuba'], 'AB479448': ['NaN', 'sponge', 'Palau'], 'AB602436': ['claw', 'crab', 'Japan: Aomori, Natsudomari peninsula']}
>>> 

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19675998

复制
相关文章

相似问题

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