【问题标题】:How to convert a python dictionary to an 2D array and pad wherever there is mismatch in length?如何将python字典转换为二维数组并在长度不匹配的地方填充?
【发布时间】:2014-11-24 04:38:55
【问题描述】:

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

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 的方式来做到这一点?

谢谢

【问题讨论】:

    标签: python arrays dictionary


    【解决方案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())]
    

    【讨论】:

    • 是的,我想我修正了第二个 for 循环中的错误。
    【解决方案2】:

    对于 lmax,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 2023-03-24
      • 1970-01-01
      • 2017-08-27
      • 2015-12-22
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      相关资源
      最近更新 更多