2

私は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',...)

したがって、出力は次のようになります。

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

私はいくつかの異なる解決策を試しましたが、うまくいきませんでした...たとえば、辞書の理解。

dict = { i: value_list for i in key_tuple }

上記は私にこれを与えます(異なるキーを使用しますが、それぞれに同じ値を関連付けます)。

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

ポインタをいただければ幸いです...ありがとう!

4

3 に答える 3

7

itertools.chain.from_iterable, itertools.izip(またはzip) と dict 内包表記を使用できます。

>>> 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']}
于 2013-10-30T07:18:23.790 に答える
1

zipiterを使用して、次のように目的の出力辞書を作成できます

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リスト キー内の必要な要素数が変更された場合は、新しい長さの値を に置き換えることができます。


これを作るのは本当に楽しかったです。

于 2013-10-30T07:28:31.673 に答える