为了账号安全,请及时绑定邮箱和手机立即绑定

如何在大型数据集中查找包含部分信息的 Python 列表并将其组合成单个列表

如何在大型数据集中查找包含部分信息的 Python 列表并将其组合成单个列表

当年话下 2023-08-15 17:11:29
我正在从 CSV 文件中读取行并创建一个包含所有行的列表列表。最后我将列表的列表发送到 MySQL 数据库。CSV 文件中约有 150 万行。整个过程大约需要一分半钟,这没有问题,列表列表的大小也没有问题。下面是从 CSV 文件中摘录的示例,由于实际列数较多而进行了简化:['AIDS mortality - Females', 'Rate', 'Females estimate', 'All countries', '03M49WLD', 1994, 0.110264]['AIDS mortality - Females', 'Rate', 'Females upper estimate', 'All countries', '03M49WLD', 1994, 0.120264]['HIV Incidence - males 15-24', 'Rate', 'Males (15-24)', 'upper estimate', 'Patigi', 'NGA_3_396', 2019, 0.00068]['AIDS mortality - Females', 'Rate', 'Females lower estimate', 'All countries', '03M49WLD', 1994, 0.100264]...挑战在于我需要将给定“指标”(第一个值)的估计值、上估计值和下估计值放入单个列表中,以便它们最终位于数据库中的同一行。在此示例中,三行带有AIDS mortality - Females. 数据库表的每一行都有用于估计/下限/上限的列。这意味着我最终得到的数据库行数仅为原始 CSV 文件行数的三分之一。让事情变得复杂的是,我无法对 CSV 文件中的三个相应行(估计/上/下)可以找到的位置做出任何假设。这里它们在一起是为了说明,但实际上它们可以相距一百万行。我尝试过暴力破解该问题,因此对于从 CSV 文件读取的每个新行,扫描所有列表以查看所有其他值是否相同,除了估计值/上估计值/下估计值。如果是,则合并,如果不是,则创建新列表。然而,这是非常低效的并且花费太长时间。我觉得这里有一个技巧,经验丰富的开发人员会知道优化这个过程。
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

如果我正确理解了这个问题,那么您似乎需要为每个“指标”构建一个字典,它将该指标的估计值映射到其相应的值。


rows = [

    ['AIDS mortality - Females', 'Rate', 'Females estimate', 'All countries', '03M49WLD', 1994, 0.110264],

    ['AIDS mortality - Females', 'Rate', 'Females upper estimate', 'All countries', '03M49WLD', 1994, 0.120264],

    ['HIV Incidence - males 15-24', 'Rate', 'Males (15-24)', 'upper estimate', 'Patigi', 'NGA_3_396', 2019, 0.00068],

    ['AIDS mortality - Females', 'Rate', 'Females lower estimate', 'All countries', '03M49WLD', 1994, 0.100264]

]


indicator = {}


for row in rows:

    if row[0] not in indicator:

        indicator[row[0]] = {}

    indicator[row[0]][row[2]] = row[-1]


for key, value in indicator.items():

    print(key, value)

输出:


AIDS mortality - Females {'Females estimate': 0.110264, 'Females upper estimate': 0.120264, 'Females lower estimate': 0.100264}

HIV Incidence - males 15-24 {'Males (15-24)': 0.00068}

编辑 - 刚刚注意到示例数据中的第三行有 8 列,而其他有 7 列。您能详细说明吗?


查看完整回答
反对 回复 2023-08-15
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信