我正在尝试解析jenkins API以获取工作名称和工作状态,并为每个各自的工作和状态构建单独的词典,然后将这些单独的词典添加到最终列表中。 到目前为止,我所做的是
url = "https://" + self.jenkins_instance + "/api/json"
urllib3.disable_warnings(category=InsecureRequestWarning)
res = requests.get(
url,
auth=HTTPBasicAuth(
self.user,
self.api
),
verify=False
)
jobs = json.loads(res.text).get('jobs')
for j in jobs:
job_name = j.get('name')
job_state = j.get('color')
self.my_dict['job_name'] = job_name
self.my_dict['job_state'] = job_state
print(self.my_dict)
self.my_list.append(self.my_dict)
print(self.my_list)
url, user and api
是我其余代码中已定义的值。
我得到了我的值,并且正在从这些值中构建字典,但是当我将这些字典添加到最终列表中时,它没有所有数据,只有最后一个字典值。 我希望列表具有字典的所有值。
如果我缩进代码以将字典添加到foor循环中,则列表具有所有相同的元素。
我应该如何更改代码以获得预期的输出。
答案 0 :(得分:4)
self.my_dict
是可变对象。因此,对于每个作业,您都将覆盖job_name和job_state
for j in jobs:
summary = {"job_name": j.gen("name"), "job_state": j.get('color')}
self.my_list.append(summary)
有更优雅的方法可以做到这一点(列表理解或生成器),但这可以解决您的错误