如何合并同name对应的多pic值,生成单条字典记录?
问题:合并相同name对应的多个pic输出
当前输出结果
{'name': name1 , 'pic': pic1} {'name': name1 , 'pic': pic2} {'name': name1 , 'pic': pic3} {'name': name2 , 'pic': pic4} {'name': name2 , 'pic': pic5} {'name': name2 , 'pic': pic6} {'name': name3 , 'pic': pic7} {'name': name3 , 'pic': pic8} {'name': name3 , 'pic': pic9} {'name': name3 , 'pic': pic10}
期望输出格式
{'name': name1 , 'pic': pic1, pic2, pic3} {'name': name2 , 'pic': pic4, pic5, pic6} {'name': name3 , 'pic': pic7, pic8, pic9, pic10}
现有代码
for links in url_list: try: r = requests.get(links, headers=headers, params=params, timeout=20) except requests.exceptions.ConnectionError as err: print('Bad status code', r.status_code) soup = BeautifulSoup(r.content, 'lxml') name = soup.find('h1', class_='name') pics = soup.findAll('a', class_='gallery') for pic in pics: pic = baseurl + pic['href'] list = {'name': name,'pic': pic} print(list)
解决方案
核心思路是先按name分组收集所有对应的pic,最后统一输出聚合后的结果。可以用字典实现分组存储,修改后的代码如下:
# 初始化字典,用于按name聚合对应的pic列表 name_pic_map = {} for links in url_list: try: r = requests.get(links, headers=headers, params=params, timeout=20) except requests.exceptions.ConnectionError as err: print('Bad status code', r.status_code) continue # 跳过出错的链接,继续处理下一个 soup = BeautifulSoup(r.content, 'lxml') # 提取name的文本内容,避免存储Tag对象 name = soup.find('h1', class_='name').text.strip() pics = soup.findAll('a', class_='gallery') # 收集当前页面下的所有pic链接 current_pics = [baseurl + pic['href'] for pic in pics] # 更新分组字典:存在则追加,不存在则新建条目 if name in name_pic_map: name_pic_map[name].extend(current_pics) else: name_pic_map[name] = current_pics # 按期望格式输出聚合结果 for name, pic_list in name_pic_map.items(): pic_str = ', '.join(pic_list) # 若name本身是变量而非字符串,可去掉'{name}'的引号 print(f"{{'name': '{name}' , 'pic': {pic_str}}}")
关键修改说明
- 分组存储:用
name_pic_map字典替代逐行打印,实现相同name的pic聚合。 - 文本提取:通过
.text.strip()获取name的纯文本,避免输出BeautifulSoup的Tag对象。 - 错误处理优化:添加
continue跳过异常链接,防止后续代码因r未定义报错。 - 批量输出:最后遍历字典,将pic列表转为逗号分隔的字符串,匹配目标格式。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

