首页 > 解决方案 > 如何将字典列表转换为逐列移动的行列表?

问题描述

我想将字典列表转换为包含这些行的列的行列表。我还希望订单从第 1 列开始并向下移动到列的底部,然后从下一列开始,依此类推,直到列表完成。

我也知道我的max_items_per_column = 25

假设我有一个这样的列表,my_list = [1,2,3,...89,90]但有如下简单的字典:

my_list = [dict1, dict2, ... dict90]

我想把它转换成这样:

 1  26  51   76
 2  27  52   77
 3  28  53   78
 4  29  54   79
 5  30  55   80
 6  31  56   81
 7  32  57   82
 8  33  58   83
 9  34  59   84
10  35  60   85
11  36  61   86
12  37  62   87
13  38  63   88
14  39  64   89
15  40  65   90
16  41  66   
17  42  67   
18  43  68   
19  44  69   
20  45  70   
21  46  71   
22  47  72   
23  48  73   
24  49  74   
25  50  75  

所以转换后的列表可以这样声明:

converted_list = [
    [dict1, dict26, dict51, dict76],
    [dict2, dict27, dict52, dict77],
    [dict3, dict28, dict53, dict78],
    .
    .
    .
    [dict25, dict50, dict75,None]
]

我不确定如何做到这一点,我也不确定这是否最好使用 Pandas 来完成。

标签: pythonpandas

解决方案


如果您希望它作为最终格式的数据框,您可以这样做:

my_list = [i for i in range(1, 91)] # setting up an example
next_list = [my_list[x:x+25] for x in range(0, len(my_list), 25)] # groups into a list of lists of len 25 each
df = pd.DataFrame.from_records(next_list).T

df 看起来像:

>>> df
       0     1     2     3
0    1.0  26.0  51.0  76.0
1    2.0  27.0  52.0  77.0
2    3.0  28.0  53.0  78.0
3    4.0  29.0  54.0  79.0
4    5.0  30.0  55.0  80.0
5    6.0  31.0  56.0  81.0
6    7.0  32.0  57.0  82.0
7    8.0  33.0  58.0  83.0
8    9.0  34.0  59.0  84.0
9   10.0  35.0  60.0  85.0
10  11.0  36.0  61.0  86.0
11  12.0  37.0  62.0  87.0
12  13.0  38.0  63.0  88.0
13  14.0  39.0  64.0  89.0
14  15.0  40.0  65.0  90.0
15  16.0  41.0  66.0   NaN
16  17.0  42.0  67.0   NaN
17  18.0  43.0  68.0   NaN
18  19.0  44.0  69.0   NaN
19  20.0  45.0  70.0   NaN
20  21.0  46.0  71.0   NaN
21  22.0  47.0  72.0   NaN
22  23.0  48.0  73.0   NaN
23  24.0  49.0  74.0   NaN
24  25.0  50.0  75.0   NaN

如果要将其转换回列表列表,可以执行以下操作:

converted_list = []
for index, rows in df.iterrows():
    my_list = [rows[0], rows[1], rows[2], rows[3]]
    converted_list.append(my_list)

转换列表:

[[1.0, 26.0, 51.0, 76.0], [2.0, 27.0, 52.0, 77.0], [3.0, 28.0, 53.0, 78.0], [4.0, 29.0, 54.0, 79.0], [5.0, 30.0, 55.0, 80.0], [6.0, 31.0, 56.0, 81.0], [7.0, 32.0, 57.0, 82.0], [8.0, 33.0, 58.0, 83.0], [9.0, 34.0, 59.0, 84.0], [10.0, 35.0, 60.0, 85.0], [11.0, 36.0, 61.0, 86.0], [12.0, 37.0, 62.0, 87.0], [13.0, 38.0, 63.0, 88.0], [14.0, 39.0, 64.0, 89.0], [15.0, 40.0, 65.0, 90.0], [16.0, 41.0, 66.0, nan], [17.0, 42.0, 67.0, nan], [18.0, 43.0, 68.0, nan], [19.0, 44.0, 69.0, nan], [20.0, 45.0, 70.0, nan], [21.0, 46.0, 71.0, nan], [22.0, 47.0, 72.0, nan], [23.0, 48.0, 73.0, nan], [24.0, 49.0, 74.0, nan], [25.0, 50.0, 75.0, nan]]

推荐阅读