关于分类词典已经有很多问题了,但我找不到正确的答案。
我有字典五:

v = {3:4.0, 1:-2.0, 10:3.5, 0:1.0}

我们必须把字典V变成一个排序表。
lijst(v) = [1.0, -2.0, 0.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.5]

我尝试使用此代码:
def lijst(x):
    return sorted(x.items(), key=lambda x: x[1])

这是我收到的列表:
lijst(v) = [(1, -2.0), (0, 1.0), (10, 3.5), (3, 4.0)]

是否有人知道如何将其转换为按键顺序排序的值列表,其中缺少的值用零填充?

最佳答案

只需使用itertools.chain.from_iterable将结果变平(元组列表):

>>> import itertools

>>> list(itertools.chain.from_iterable([(1, -2.0), (0, 1.0), (10, 3.5), (3, 4.0)]))
[1, -2.0, 0, 1.0, 10, 3.5, 3, 4.0]

如果我误解了您的原始请求,并且字典表示一个“稀疏向量”(其中键是索引),您可以简单地填充一个仅包含零的列表:
>>> res = [0.0]*(max(v)+1)       # create a dummy list containing only zeros
>>> for idx, val in v.items():   # populate the requested indices
...     res[idx] = val
>>> res
[1.0, -2.0, 0.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.5]

或者,如果您有麻木感,也可以避免出现循环:
>>> import numpy as np

>>> arr = np.zeros(max(v)+1)
>>> arr[list(v.keys())] = list(v.values())
>>> arr
array([ 1. , -2. ,  0. ,  4. ,  0. ,  0. ,  0. ,  0. ,  0. ,  0. ,  3.5])

最后一种方法依赖于这样一个事实,即即使forkeys的顺序是任意的,只要字典没有修改,它们仍然直接对应:
键和值以非随机的任意顺序迭代,不同于Python实现,并且取决于字典的插入和删除历史。如果键、值和项视图被迭代而没有对字典进行中间的修改,则项的顺序将直接对应。
来源4.10.1. Dictionary view objects

关于python - 将字典排序到列表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45468480/

10-14 15:08
查看更多