python - 如何将字典列表转换为逐列移动的行列表?
问题描述
我想将字典列表转换为包含这些行的列的行列表。我还希望订单从第 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 来完成。
解决方案
如果您希望它作为最终格式的数据框,您可以这样做:
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]]
推荐阅读
- javascript - React 应用程序在 Google App Engine 上运行时抛出 Uncaught SyntaxError: Unexpected token '<'
- .net - 如何检查列表对象是否为空?
- powershell - 超时调用命令
- r - mlr3,基准测试和嵌套重采样:如何从基准对象中提取调整模型以计算特征重要性
- unicode - unicode 异常字符列表
- c - /usr/bin/ld: 找不到 -lgcc
- visual-studio-code - 在启动时配置 Java Runtime VS Code
- rust - How to fix "cannot infer type" error when implementing methods for a generic struct that return specific types?
- docker - 使用视觉工作室的 Docker_error
- android - 无法解析第三方库