2016-10-06 10 views
0

私は2つのリストを持っています。最初のもの(リストa)には辞書のリストが含まれ、すべてのリストは特定の投稿のコメントを表します。それらはすべて同じ 'id'値を持ちます。 2番目のリスト(リストb)はdictsのみを含み、これらのdictsは投稿です。Pythonはdictのリストを別のdictに新しい鍵として添付します

今、私はb_listのすべてのdictに「comments」という名前の新しいキーを作成し、a_listから適切なリストを値として割り当てる必要があります。そのため、対象となるリストは、dict ['id']がpost値と同じ値です。

a_list=[ 
     [{'id':'123', 'user':'Foo'}, {'id':'123','user':'Jonny'}, ...], 
     [{'id':'456', 'user':'Bar'}, {'id':'456','user':'Mary'}, ...], 
     ... 
     ] 
b_list=[{'post':'123','text': 'Something'}, {'post':'456', 'text': 'Another thing'}, ...] 

これを行うには、どのように最善の方法ですか?

+0

の辞書オブジェクトに値を追加する「何か」、 'comments':[{'id': '123'、 'user': 'Foo'}、{'id': '123'、 'user': 'Jonny'} – TigerhawkT3

+0

正確に@ TigerhawkT3 – Goran

+0

'a_list'と' b_list'は常に最初の投稿IDが '123''、' '456''などの順番になっていますか? – TigerhawkT3

答えて

0

IDの辞書を構築し、それらを通過:

>>> a_list=[ 
...   [{'id':'123', 'user':'Foo'}, {'id':'123','user':'Jonny'}, ], 
...   [{'id':'456', 'user':'Bar'}, {'id':'456','user':'Mary'},], 
...  ] 
>>> b_list=[{'post':'123','text': 'Something'}, {'post':'456', 'text':'Another thing'}, ] 
>>> d = {l[0]['id']:l for l in a_list} 
>>> for item in b_list: 
...  item['comments'] = d[item['post']] 
... 
>>> import pprint 
>>> pprint.pprint(b_list) 
[{'comments': [{'id': '123', 'user': 'Foo'}, {'id': '123', 'user': 'Jonny'}], 
    'post': '123', 
    'text': 'Something'}, 
{'comments': [{'id': '456', 'user': 'Bar'}, {'id': '456', 'user': 'Mary'}], 
    'post': '456', 
    'text': 'Another thing'}] 
0

私はa_listで、1ネストされたlistが同じ'id'を持つことになりますし、IDごとに1つだけのリストが存在することを想定しています。

これを達成するには、b_listを繰り返して、一致するかどうかをa_listで確認します。 「123」、「テキスト」:試合の場合は、あなたが `b_list`の最初の項目は、` {「ポスト」に変換されなければならないわけa_list

>>> a_list=[ 
...   [{'id':'123', 'user':'Foo'}, {'id':'123','user':'Jonny'}], 
...   [{'id':'456', 'user':'Bar'}, {'id':'456','user':'Mary'}], 
...  ] 
>>> b_list=[{'post':'123','text': 'Something'}, {'post':'456', 'text': 'Another thing'}] 
>>> 
>>> for dict_item in b_list: 
...  id = dict_item['post'] 
...  for list_item in a_list: 
...   if list_item[0]['id'] == id: 
...   dict_item['comments'] = list_item 
...   break 
... 
>>> b_list 
[{ 
    'text': 'Something', 
    'post': '123', 
    'comments': [ 
     { 
      'id': '123', 
      'user': 'Foo' 
     }, 
     { 
      'id': '123', 
      'user': 'Jonny' 
     } 
     ] 
    }, 
    { 
     'post': '456', 
     'text': 'Another thing', 
     'comments': [ 
     { 
      'id': '456', 
      'user': 'Bar' 
     }, 
     { 
      'id': '456', 
      'user': 'Mary' 
     } 
     ] 
    } 
] 
関連する問題