Python:使用嵌套lis中的多个值从tuple键生成dict

2024-10-01 13:27:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python还不熟悉,我正试图用元组作为键,用嵌套列表作为多个值来制作字典。在

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

示例如下:

value_list = [[['NaN'], ['sponge'], ['Palau']], [['skin'], ['fish'], ['Cuba']], [['claw'], ['crab'], ['Japan: Aomori, Natsudomari peninsula']]....]

还有钥匙的元组

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

因此,我希望输出是这样的

^{pr2}$

我试过几种不同的解决办法,但我不能使工作。。。e、 g.字典理解

dict = { i: value_list for i in key_tuple }

上面给出了这一点(使用不同的键,但每个键的值相同)

{'AB479448': [[[NaN, sponge, Palau]]], 'AB479449': [[[NaN, sponge, Palau]]], 'AB602436': [[[NaN, sponge, Palau]]]...etc..}

如果有任何建议。。。谢谢!在


Tags: key列表字典valueetcnanlist元组
3条回答

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

>>> 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']}

下面是一个使用^{}和字典理解的解决方案:

from itertools import chain
{keys[i]:list(chain.from_iterable(contents)) for i, contents in enumerate(my_list)}

这等于:

^{pr2}$

演示

>>> 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']}
>>> 

希望这有帮助!在

使用zip和{a2}可以创建所需的输出字典,如下所示

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替换新的 长度值。在


做这个真的很有趣。在

相关问题 更多 >