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

标签 python list for-loop dictionary iteration

---编辑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/

相关文章:

python - 在嵌套列表python中连接项目

python - 在 python 中使用两个值对作为键的最佳方法是什么?

python - 索引错误: invalid index to scalar variable for double 'for' statement

python - 使用 grequests 发布 json 数据?

python - 循环并合并以创建新列表

Python Pandas : Calculating exponentially weighted lagged squared returns (variance)

python - 如何使用 python 从差异输出中获取警报

Java ArrayList 实现

python - ValueError : not enough values to unpack (expected 2, 得到 1) 但我提供了 2 个值

r - 在R中,如何确定一个整数是否可以被一个数整除?