3

キーが4タプル(gene_region、species、ontology、length)であるdefaultdictがあります。

それをループするのは簡単です:

for gene_region, species, ontology, length in result_dict:

ただし、次のように、ネストされた方法で反復したいと思います。

for gene_region
    for species
        for ontology
            ...

どうすればいいですか?最初に値を収集する以外に方法はありませんか? または、次のダムダム方法を使用します。

for gene_region, _, _, _ in result_dict:
    for _, species, _, _ in result_dict:
        ...
4

2 に答える 2

5

さまざまな主要要素をすべてリストに収集してから、それらをループする必要があります(itertools.product()できれば を使用して)。収集は次の方法で実行できますzip()

from itertools import product

gene_regions, species_plural, ontologies, lengths = zip(*result_dict)

for gene_region, species, ontology, length in product(gene_regions, species_plural, ontologies, lengths):
    # do something with this combo.

product()ループをネストした場合と同じ一連の組み合わせが生成されます。

于 2013-08-05T11:42:46.173 に答える
2

データをネストされた辞書として再作成することを検討できると思います。

>>> result_dict = {}
>>> result_dict[(1, 2, 3, 4)] = "test"
>>> result_dict[(1, 2, 4, 4)] = "test2"
>>> result_dict
{(1, 2, 3, 4): 'test', (1, 2, 4, 4): 'test2'}

>>> result_dict2 = {}
>>> for (a, b, c, d), k in result_dict.iteritems():
...     result_dict2.setdefault(a, {}).setdefault(b, {}).setdefault(c, {})[d] = k
... 
>>> result_dict2
{1: {2: {3: {4: 'test'}, 4: {4: 'test2'}}}}

次に、任意のレベルでキーを反復処理できます。

for _, a in result_dict2.iteritems():
    for _, b in a.iteritems():
        for _, c in b.iteritems():
            for _, d in c.iteritems():
                # do something
于 2013-08-05T11:40:32.320 に答える