首页 > 解决方案 > 按客户顺序遍历 Python 字典 - 每行而不是每键

问题描述

假设以下情况:我有一个带有 3 个键的字典。每个键都是一个 5 行的 pd 数据框。

我目前正在使用以下方法遍历完整的字典:

for key in dict1:
    for i in range(len(dict1[key])):
         do_something

所以这个迭代的工作方式是:

  1. 迭代第 1 行 - 键 1

  2. 迭代第 2 行 - 键 1

  3. 迭代第 3 行 - 键 1

  4. 迭代第 4 行 - 键 1

  5. 迭代第 5 行 - 键 1

  6. 迭代第 1 行 - 键 2

  7. 迭代第 2 行 - 键 2 等...

但是,我想做的是:

  1. 迭代第 1 行 - 键 1

  2. 迭代第 1 行 - 键 2

  3. 迭代第 1 行 - 键 3

  4. 迭代第 2 行 - 键 1

  5. 迭代第 2 行 - 键 2 等...

有没有一种聪明的方法来改变 for 循环的迭代顺序?

标签: pythonpandasloopsdictionaryiteration

解决方案


它不需要聪明的方法。您必须以for不同的顺序使用 -loops - first range, next keys。就这样。

for i in range(len(dict1['key1'])):
    for key in dict1:
        print(dict1[key].iloc[i,0])

最少的工作代码

import pandas as pd

dict1 = {
    'key1': pd.DataFrame([f'row{i} key1' for i in range(1, 6)]),
    'key2': pd.DataFrame([f'row{i} key2' for i in range(1, 6)]),
    'key3': pd.DataFrame([f'row{i} key3' for i in range(1, 6)]),
}

for i in range(len(dict1['key1'])):
    for key in dict1:
        print(dict1[key].iloc[i,0])

结果:

row1 key1
row1 key2
row1 key3
row2 key1
row2 key2
row2 key3
row3 key1
row3 key2
row3 key3
row4 key1
row4 key2
row4 key3
row5 key1
row5 key2
row5 key3

推荐阅读