2017-11-16 1 views
-1

私は、以下のように、Pythonでキー値のペアがあるとします。インデックスに従って辞書を結合する

a = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'test1', 'test', '', '', '', '', '', '', '', '', '', ''] 

今私は、これらの値を組み合わせたい:

b = {"18", "17", "16", "15", "14", "13", "12", "11", "21", "22", "23", "24", "25", "26", "27", "28","48", "47", "46", "45", "44", "43", "42", "41", "31", "32", "33", "34", "35", "36", "37", "38"} 

は、私は、以下に示す結果のような\ bに対して変数aからの値を組み合わせることができますどのような方法があります:

c = {'44': ['test1'], '43': ['test2']} 

ありがとうございます。あなたがzipを探している

+1

はあなたがここで達成しようとしているものは明らかではありません。 'b'は集合なので、実際に' b'の値と 'a'の値を一致させる方法はありません。 –

答えて

0

、このような何か:セットが順序付けられていないよう

>>> dict(zip(b, filter(None, a))) 
{'43': 'test1', '17': 'test'} 

は、実行時に、これは異なる結果を与えることに注意してください。

0

あなたは、あなたの問題解決するためにzipを使用することがあります。

a = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'test1', 'test', '', '', '', '', 
    '', '', '', '', '', ''] 
b = ["18", "17", "16", "15", "14", "13", "12", "11", "21", "22", "23", "24", "25", "26", "27", "28", "48", "47", "46", 
    "45", "44", "43", "42", "41", "31", "32", "33", "34", "35", "36", "37", "38"] 

print dict((x, y) for x, y in zip(b, a) if y != '') 

をそして、あなたは出力が得られます:

{'44': 'test1', '43': 'test'} 

あなたは、このようなのpython組み込み関数についての詳細を知りたい場合は、あなたがかもしれませんこのofficial documentを参照してください。

0

セットは順序付けされていないため、直接的な解決策に問題があります。しかし、元々はリストであったものの重複をなくすためにセットを作成したと仮定すると、アイテムの不一致のフィルタはありませんが、Franciscoの回答が示唆しているようにジッパーと組み合わせて別の重複除去方法を使用できます。

正確に何をしたい
a = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'test1', 'test', '', '', '', '', '', '', '', '', '', ''] 
b_list = ["18", "17", "16", "15", "14", "13", "12", "11", "21", "22", "23", "24", "25", "26", "27", "28","48", "47", "46", "45", "44", "43", "42", "41", "31", "32", "33", "34", "35", "36", "37", "38", "18", "17"] 
# added hypothetical duplicates to b for the sake of showing how they're removed below 
b = sorted(set(b_list), key=lambda x: b_list.index(x)) 

c = dict(zip(a, b)) 
del c[''] # removes the erroneous '' key 

出力:

{'44': 'test1', '43': 'test'} 
+0

ソートする必要はありません。 'a'のインデックス値が出現したところで' b'の値を取得するだけです。私の例では、値を含む 'a 'のインデックスは20と21なので、' b'から値44と43を取得するだけです。 –

+0

私の例での並べ替えは、重複の異なる開始点を想定しています。実際にリストを並べ替えるのではなく、それらの複製を削除するための代替設定を許可することだけです。上記のaとbを使用すると、私の例への出力は{'44': 'test1'、 '43': 'test'}です。私はあなたがそれを実行し、テストできるように上記のコードを更新しました。 – ZaxR

関連する問題