附加到列表中的每个字典

时间:2016-09-14 19:27:33

标签: python list dictionary

我有一个字典对象列表:

[{u'ID': 46757,
  u'currentenddate': u'09/30/2016',
  u'name': u'Project A',
  u'projstartdate': u'05/01/2016'},
 {u'ID': 46625,
  u'currentenddate': u'07/15/2016',
  u'name': u'Project B',
  u'projstartdate': u'05/02/2016'},
 {u'ID': 47100,
  u'currentenddate': u'08/02/2016',
  u'name': u'Project C',
  u'projstartdate': u'06/01/2016'}]

我想在所有字典项目中附加一个新字段client_id,结果是:

[{u'ID': 46757,
  u'currentenddate': u'09/30/2016',
  u'name': u'Project A',
  u'projstartdate': u'05/01/2016'},
  u'client_id': u'12398'},
 {u'ID': 46625,
  u'currentenddate': u'07/15/2016',
  u'name': u'Project B',
  u'projstartdate': u'05/02/2016'},
  u'client_id': u'12398'},
 {u'ID': 47100,
  u'currentenddate': u'08/02/2016',
  u'name': u'Project C',
  u'projstartdate': u'06/01/2016'}
  u'client_id': u'12398'}]
对于所有字典项,

client_id将保持不变。我知道我可以使用for循环与dict['client_id'] = id结合来实现结果,但代码不再向量化。是否有一种pythonic方法可以附加到列表中的每个dict项目中?

更新

感谢关于列表推导与for循环的热烈对话。我将测试这两种方法,并根据我的情况使用两种方法中较快的方法。此外,在未来,我将明确定义我所说的“矢量化”'和' pythonic'在我的问题中,所以我们都在同一页面上(感谢@Adam Smith)。

2 个答案:

答案 0 :(得分:1)

这样的事情可以解决问题。

result = [dict(data, client_id='') for data in list_of_dicts]

答案 1 :(得分:-1)

Python 3.5 解决方案展示了新的dict 解包

[{**dict_element, **{u'client_id':u'12398'}} for dict_element in your_list]

检查this

<强>演示

>>> your_list = [{u'ID': 46757,
...   u'currentenddate': u'09/30/2016',
...   u'name': u'Project A',
...   u'projstartdate': u'05/01/2016'},
...  {u'ID': 46625,
...   u'currentenddate': u'07/15/2016',
...   u'name': u'Project B',
...   u'projstartdate': u'05/02/2016'},
...  {u'ID': 47100,
...   u'currentenddate': u'08/02/2016',
...   u'name': u'Project C',
...   u'projstartdate': u'06/01/2016'}]
>>> 
>>> from pprint import pprint
>>> pprint([{**dict_element, **{u'client_id':u'12398'}} for dict_element in your_list])
[{'ID': 46757,
  'client_id': '12398',
  'currentenddate': '09/30/2016',
  'name': 'Project A',
  'projstartdate': '05/01/2016'},
 {'ID': 46625,
  'client_id': '12398',
  'currentenddate': '07/15/2016',
  'name': 'Project B',
  'projstartdate': '05/02/2016'},
 {'ID': 47100,
  'client_id': '12398',
  'currentenddate': '08/02/2016',
  'name': 'Project C',
  'projstartdate': '06/01/2016'}]