如何将python字典转换为2D数组并填充长度不匹配的地方?

时间:2014-11-23 19:43:55

标签: python arrays dictionary

我正在尝试将字典项放入数组中。键都是整数,但每个值都是不同长度的列表。我想转换为数组并用零填充。我有以下内容

a = {1:[0, 1], 2:[21], 3:[]}
lmax = 0
for item in a.values():
    lmax = len(item) if len(item) > lmax else lmax
t = np.zeros(len(a), lmax)
for key in a:
    t[ key, :len(a[key]) ] = a[key]

有更多的pythonic方法吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您似乎在代码中混合了键和值,所以我不确定它是如何工作的。

这样做的一种方法是

a = {1:[0, 1], 2:[21], 3:[]}
max_length = max(len(item) for item in a.values())
t = [[0] * (max_length - len(item)) + item for item in a.values()]

或者,如果您想确保列表位于'右边'顺序 - 即原始字典中具有最低键的项目首先出现 - 您可以将其更改为

t = [[0] * (max_length - len(item)) + item for _, item in sorted(a.items())]

答案 1 :(得分:0)

表示lmax,

lmax = max(map(len, a.values()))