从词典列表中构建列表

时间:2019-06-05 10:11:14

标签: python python-3.x dictionary

我正在尝试解析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循环中,则列表具有所有相同的元素。

我应该如何更改代码以获得预期的输出。

1 个答案:

答案 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)

有更优雅的方法可以做到这一点(列表理解或生成器),但这可以解决您的错误