Skip to main content
 首页 » 编程设计

python之按列而不是行键控

2025年05月04日23bhlsheji

我代表a Matrix by a dictionary并假设我有一个键是行索引的字典,我如何将它(就地看起来很棘手)转换为键将是列索引的字典?


这是我的尝试:

by_row = {} 
N = 3 
M = 5 
for i in range(1, N): 
    row = [] 
    for j in range(1, M): 
        row.append(j) 
    by_row[i] = row 
print by_row 
 
by_column = {} 
for i in range(1, M): 
    col = [] 
    for j in range(1, N): 
        col.append(by_row[j][i - 1]) 
    by_column[i] = col 
print by_column 

但我正在寻找更优雅和 Pythonic 的东西。这里 my_dict_1 以行索引作为键,而 my_dict_2 以列索引作为键。输出:

{1: [1, 2, 3, 4], 2: [1, 2, 3, 4]} 
{1: [1, 1], 2: [2, 2], 3: [3, 3], 4: [4, 4]} 

请您参考如下方法:

使用 enumerate() function为您的列编号,并按排序顺序遍历键:

by_column = {} 
for rownum, row in sorted(by_row.iteritems()): 
    for colnum, value in enumerate(row, 1): 
        by_column.setdefault(colnum, []).append(value) 

这假设您的字典中存在所有行号,并且所有行的长度都相等。

演示:

>>> N, M = 2, 4  # 2 rows, each 4 columns 
>>> by_row = {r: range(1, M + 1) for r in range(1, N + 1)} 
>>> by_row 
{1: [1, 2, 3, 4], 2: [1, 2, 3, 4]} 
>>> by_column = {} 
>>> for rownum, row in sorted(by_row.iteritems()): 
...     for colnum, value in enumerate(row, 1): 
...         by_column.setdefault(colnum, []).append(value) 
... 
>>> by_column 
{1: [1, 1], 2: [2, 2], 3: [3, 3], 4: [4, 4]}