append()无法正常的把字典加到数组综合

期望结果: 把遍历的字典放到数组中
在循环内打印每一次循环的结果如下:

图片说明

但是当把每一次循环的结果放到数组中的时候,就每次进去的都是最后一条;

图片说明

期望的结果:返回的list中包含[result1, result2, result3, result4]

代码:

 import requests
from bs4 import BeautifulSoup
def news(url):
    res = requests.get(url)
    res.encoding = 'utf-8'
    soup = BeautifulSoup(res.text,'html.parser')
    contentList = soup.select('.postlist-item')    
    result = {}
    list=[]
    for b in contentList:
        result['subject'] = b.select('h2')[0].text
        result['viewers'] = b.select('.u-floatRight ')[0].select('.post-meta-item')[0].text 
        result['start'] = b.select('.u-floatRight ')[0].select('.post-meta-item')[1].text
        result['thumbsUp'] = b.select('.u-floatRight ')[0].select('.post-meta-item')[2].text
        #print(result)
        list.append(result)
    return list
 url = 'http://www.woshipm.com/category/pmd'
news(url)

因为只定义了一次result = {} ,导致list中所有元素都是同一个result对象,它的值就是最后一次赋值的值。
把result = {} 移放到for b in contentList:里面,每次建一个新的result对象,就可以解决题主的问题。

我也遇到了类似问题,题主可以试试list.append(result.copy()),楼上解释的很详细,很是感谢。