2017-10-03 17 views
-1

以下の内容については、 "name"の検証に基づいてどのように "a_id"値と "b_id"値を取得できますか?辞書のリストを1つの辞書に変換する

[ 
{ 
    "name": "name1", 
    "a_id": "12345", 
    "b_id": "0d687c94c5f4" 
}, 
{ 
    "name": "name2", 
    "a_id": "67890", 
    "b_id": "0d687c94c5f4" 
}, 
{ 
    "name": "name3", 
    "a_id": "23857", 
    "b_id": "9ec34be3d535" 
}, 
{ 
    "name": "name4", 
    "a_id": "84596", 
    "b_id": "9ec34be3d535" 
}, 
{ 
    "name": "name5", 
    "a_id": "d82ebe9815cc", 
    "b_id": null 
} 

]

私は

{result['a_id']: result['name'] for result in data} 

のような二つの値のために使用していたが、3番目の値のために、それは私がこのように使用している場合、私はこれを行うことはできません。

{result['a_id']: result['name'], result['b_id']: result['name'] for result in data} 

正しい構文は何ですか。

+0

をあなたはあなたの出力は次のようになりたいのですが何の例を示していることはできますか? – CoryKramer

+0

お問い合わせいただきありがとうございます。 COLDSPEEDが投稿したものは私が探しているものです。返信ボックスに問題があり、すぐに投稿できませんでしたが、回答がありました。 – pylearn

答えて

2

私は、ネストされたループとdictの内包表記はトリックを行うべきだと思う:

data = {result[k] : result['name'] for result in data for k in ('a_id', 'b_id')} 

あなたが好きなあなたはできるだけ多くのキーを追加することができます。それは、より理にかなっている場合は、変数keysで、外であなたの鍵を宣言:

keys = ('a_id', 'b_id', ...) 
data = {result[k] : result['name'] for result in data for k in keys} 
+0

投稿していただきありがとうございます。あなたは実際に私の質問に答えました。私は得られる出力に1つの質問があります。 Iは を使う{[ 'B_IDを']結果:データをもたらすために[ '名前']結果} 私は3つの値の代わりに5 0d687c94c5f4、9ec34be3d535ヌルを取得しています。重複した "b_id"があることに気づいた場合。しかし、私はフィルタリングする代わりにそれらを必要とします。申し訳ありませんが、別の質問にさらに質問してもらえない場合、または新しい質問を投稿する必要があるかどうかわかりません。 – pylearn

+0

@pylearn本質的には、重複するキーを持つ辞書を求めています。残念ながら、それはできることではありません。さらなる質問がある場合は、私はむしろ[この1つを最初に閉じた](https://stackoverflow.com/help/someone-answers)を開き、もう1つ開きます。しかし、鍵を複製することに問題がある場合は、申し訳ありませんが、それは不可能です。 –

関連する問題