我代表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]}
