Python:修改列表项的信息

时间:2014-08-07 19:45:12

标签: python

我有这段Python代码:

constraints = {
  'signupForms': [{key: form[key] for key in ['id']} for form in signup_forms],
  'groups': [{'id': group[key] for key in ['member_group_id']} for group in groups],
  'authorizedApps': [{key: app[key] for key in ['id']} for app in authorized_apps],
}
for step in len(eda_workflow['steps']):
    eda_workflow['steps'][step]['constaints'] = constraints

我想要做的就是遍历每个工作流程'步骤'并将其约束设置为预先构建的相同约束dict,但我不确定这是否是“pythonic” “方式

2 个答案:

答案 0 :(得分:4)

术语" Pythonic"虽然是主观的,但却想尽可能少地编写代码,你可以使用" map"功能。 Map在可迭代中的每个项目上运行一个函数。所以你的代码看起来像这样:

map(lambda item: item['constaints'] = constraints, eda_workflow['steps'])

尽管代码较少,但由于map将返回结果列表,因此会占用更多内存。如果你关心记忆,你应该使用chepner的回答

答案 1 :(得分:3)

更多Pythonic(并且正确,与您当前的代码不同)将是

for item in eda_workflow['steps']:
    item['constaints'] = constraints

迭代列表中的实际项目,而不是(正如您尝试的那样)对列表的索引进行迭代。