我有一个字典对象列表:
[{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)。
答案 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'}]