You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并同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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:35:49