1

私はこれに助けが必要ですPythonで複数の変数を使用してマップする方法は?

私はリストのリストと辞書のリストを持っています。辞書のリストには、リストのリスト内の項目を指す索引のリストの値があります。 私がする必要があるのは、他の2人から辞書の新しいリストを作成することです。

list_1 = [[a,b,c], [d,e,f], ...] 

list_2 = [{key_11: [0,2] , key_12: [0]}, {key_21: [2,0], key_22: [1]}, ...] 

list_2で最初辞書の値は、最初リスト0のlist_1にのみポイントのように...私は必要なもの

は同じで辞書の新しいリストでありますlist_2の辞書の値で表されるlist_1 [i]上の項目の値を使用します。 だから、このような何か:list_2

にxに対して

return [{key: some_funct(val) for key, val in x.items()} for x in list_2] 

とsome_funct辞書の値をとり、list_1に正しい項目を返す[X]:

return [{{key_11: [a,c] , key_12: [a]}, {key_21: [f,d], key_22: [e]}, ...] 

私はこのような何かを試してみました

私は近いと知っています! some_functを正しく動作させることはできません.3つの要素、list_1のすべての要素、list_2のすべての辞書、および各辞書のすべての値をマップしようとしているからです。

答えて

1

ここでzipを使用すると、両方のリストを同時に処理する必要があります。そして、そのようなリストごとに、辞書の理解を使用して、リスト内の要素を対応するものにマップします。

同様:

[{k:[sub1[v] for v in vs] for k, vs in sub2.items()} 
for sub1, sub2 in zip(list_1, list_2)] 

これが生成する - あなたのサンプル入力で:

>>> list_1 = [['a','b','c'], ['d','e','f']] 
>>> list_2 = [{'key_11': [0,2] , 'key_12': [0]}, {'key_21': [2,0], 'key_22': [1]}] 
>>> [{k:[sub1[v] for v in vs] for k, vs in sub2.items()} 
... for sub1, sub2 in zip(list_1, list_2)] 
[{'key_12': ['a'], 'key_11': ['a', 'c']}, {'key_21': ['f', 'd'], 'key_22': ['e']}] 

どのように動作しますか?

外側の部分はリストの理解です。 zip(list_1, list_2)を繰り返して、list_1list_2という行を取得します。これらの行sub1sub2はそれぞれリストと辞書です。

このようなすべてのsub1, sub2については、結果のリストに辞書を作成します。この辞書は辞書理解度{k:[sub1[v] for v in vs] for k, vs in sub2.items()}で構成されています。 sub2のキー値タプル(sub2.items()と、キーkを関連付けるすべてのそのようなキーと値のペアについて、辞書の値に基づいてリストの理解度を再構築した値をvsとします。

vsは、辞書のキーに関連付けられたリストです。インデックスに関連付けられた要素を取得するだけで、マッピングを実行するだけです。[sub1[v] for v in vs]

関連する問題