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

求助:将CSV/元组转换为指定格式Dict的实现方法

没问题,这两个需求都很容易实现,我来一步步给你讲清楚~

处理CSV文件生成目标字典

你用csv.DictReader()的思路是对的,只是需要额外处理按ticket分组收集asset的逻辑。这里有两种实现方式:

方式1:用普通字典手动判断

这种方式不需要额外导入模块,适合基础场景:

import csv

# 初始化空字典
ticket_assets = {}

with open('your_file.csv', 'r') as csv_file:
    # 用DictReader读取,自动识别表头
    reader = csv.DictReader(csv_file)
    for row in reader:
        ticket = row['ticket']
        asset = row['asset']
        # 如果ticket还没作为key存在,先创建空列表
        if ticket not in ticket_assets:
            ticket_assets[ticket] = []
        # 将当前asset添加到对应ticket的列表中
        ticket_assets[ticket].append(asset)

print(ticket_assets)
# 输出: {'1111': ['3456', '6789'], '1122': ['2345', '7890']}

方式2:用collections.defaultdict简化代码

如果想让代码更简洁,可以用defaultdict自动处理空列表的初始化:

import csv
from collections import defaultdict

# 初始化一个默认值为列表的字典
ticket_assets = defaultdict(list)

with open('your_file.csv', 'r') as csv_file:
    reader = csv.DictReader(csv_file)
    for row in reader:
        # 直接添加,无需判断key是否存在
        ticket_assets[row['ticket']].append(row['asset'])

# 可选:如果需要转换成普通字典(而非defaultdict类型)
ticket_assets = dict(ticket_assets)

print(ticket_assets)
处理元组生成目标字典

处理元组的逻辑和CSV基本一致,核心都是遍历+分组收集,同样有两种方式:

方式1:普通字典实现

data_tuple = ((1111, 3456), (1111, 6789), (1122, 2345), (1122, 7890))
ticket_assets = {}

for ticket, asset in data_tuple:
    # 注意:你的目标字典key是字符串类型,所以这里转成str()
    ticket_str = str(ticket)
    asset_str = str(asset)
    
    if ticket_str not in ticket_assets:
        ticket_assets[ticket_str] = []
    ticket_assets[ticket_str].append(asset_str)

print(ticket_assets)
# 输出: {'1111': ['3456', '6789'], '1122': ['2345', '7890']}

方式2:defaultdict简化

from collections import defaultdict

data_tuple = ((1111, 3456), (1111, 6789), (1122, 2345), (1122, 7890))
ticket_assets = defaultdict(list)

for ticket, asset in data_tuple:
    # 转成字符串匹配目标格式
    ticket_assets[str(ticket)].append(str(asset))

# 转成普通字典(可选)
ticket_assets = dict(ticket_assets)

print(ticket_assets)

如果不需要把数字转成字符串,直接用原始整数作为key和value,去掉str()转换即可。


内容的提问来源于stack exchange,提问作者Karthik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:19:26