Python将dict列表附加到另一个dict作为新密钥

时间:2016-10-06 23:35:20

标签: python django list python-3.x dictionary

我有两个清单。第一个(列表a)包含dicts列表,每个列表代表特定帖子的注释。他们都有相同的' id'值。第二个列表(列表b)仅包含dicts,这些dicts是帖子。

现在我需要创建一个名为' comments'对于b_list中的每个字典,并将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'}, ...]

那么最好和更蟒蛇的方式是什么呢?

2 个答案:

答案 0 :(得分: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'}]

答案 1 :(得分:0)

我假设在a_list中,一个嵌套list将具有相同的'id',每个ID只会有一个列表。

为实现此目的,请迭代b_list并检查a_list中的匹配项。如果匹配,请将值添加到a_list

的dict对象
>>> 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'
         }
      ]
   }
]