猿问

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

我正在从 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 文件读取的每个新行,扫描所有列表以查看所有其他值是否相同,除了估计值/上估计值/下估计值。如果是,则合并,如果不是,则创建新列表。然而,这是非常低效的并且花费太长时间。


我觉得这里有一个技巧,经验丰富的开发人员会知道优化这个过程。


当年话下
浏览 86回答 1
1回答

慕慕森

如果我正确理解了这个问题,那么您似乎需要为每个“指标”构建一个字典,它将该指标的估计值映射到其相应的值。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 列。您能详细说明吗?
随时随地看视频慕课网APP

相关分类

Python
我要回答