gpt4 book ai didi

python - 在Python中同时迭代2个不同的字典

转载 作者:太空宇宙 更新时间:2023-11-03 16:18:43 24 4
gpt4 key购买 nike

---编辑2---所以我得到了一个问题:为什么我使用字典?这个问题是这个问题的后续问题:csv file compression without using existing libraries in Python

我需要压缩一个 500k csv 文件 (19MB),我选择使用字典将刻度存储在一个 csv 文件中,将符号存储在另一个 csv 文件中,以便能够解压缩值

问题:如何迭代最优化的方式?这只是 4 行的示例,但我的真实文件有 500 000 行,并且需要我永远遍历列表。

我有 3 本词典:

originalDict = {
0: ['6NH8', 'F', 'A', '0', '60541567', '60541567', '78.78', '20'],
1: ['6NH8', 'F', 'A', '0', '60541569', '60541569', '78.78', '25'],
2: ['6AH8', 'F', 'B', '0', '60541765', '60541765', '90.52', '1'],
3: ['QMH8', 'F', 'B', '0', '60437395', '60437395', '950.5', '1']
}
ticks = {0: '6NH8', 1: '6AH8', 2: 'QMH8'}
symbs = {0: 'F,A', 1: 'F,B'}

我想迭代originalDict并更改“ticks”,然后更改index 1index 2处的符号,然后删除index 2

所以,即

0: ['6NH8', 'F', 'A', '0', '60541567', '60541567', '78.78', '20']

变成:

[0, '0', '0', '60541567', '60541567', '78.78', '20']

我当前有一个 for 循环,它遍历 OriginalDict 中的值,并且在另一个 for 循环内:

for values in originalDict.values():
for ticksKey, ticksValue in ticks.items():
if values[0] == ticksValue:
values[0] = ticksKey

#Change symbs and remove char combination
for symbsKey, symbsValue in symbs.items():
comprComb = values[1] + "," + values[2]

if comprComb == symbsValue:
values[1] = str(symbsKey)
#del values[4]
#del values[4]
del values[2]

添加的其他信息:我将它们作为字典的原因是因为在 500 000 行中,某些刻度出现多次,因此,我给它们一个 int,它是字典中的键,所以 symbs 字典也适用。

最佳答案

因此,首先您要反转映射,您当前正在按值查找,这是错误且缓慢的:

ticks = {0: '6NH8', 1: '6AH8', 2: 'QMH8'}
symbs = {0: 'F,A', 1: 'F,B'}

使用ticks = {v: k for k, v in ticks.items()} (symbs 相同):

{'6NH8': 0, 'QMH8': 2, '6AH8': 1} # ticks

{'F,A': 0, 'F,B': 1} # symbs

现在您已经有了良好的数据结构,您可以相当快地完成此操作。

现在将保存数据的字典转换为列表(不知道为什么它是一个字典):

originalList = [originalDict[k] for k in range(len(originalDict))]

并重新映射值:

for line in originalList:
line[0] = ticks[line[0]]
line[1:3] = [symbs["%s,%s" % tuple(line[1:3])]]

结果:

[[0, 0, '0', '60541567', '60541567', '78.78', '20'], [0, 0, '0', '60541569', '60541569', '78.78', '25'], [1, 1, '0', '60541765', '60541765', '90.52', '1'], [2, 1, '0', '60437395', '60437395', '950.5', '1']]

关于python - 在Python中同时迭代2个不同的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38678686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com