gpt4 book ai didi

python - 将字典排序到列表中

转载 作者:太空狗 更新时间:2023-10-29 17:02:56 24 4
gpt4 key购买 nike

已经有很多关于字典排序的问题,但我找不到正确的答案。

我有字典 v:

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]

或者,如果你有 NumPy,你也可以避免 for 循环:

>>> 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])

最后一种方法依赖于这样一个事实,即使 keysvalues 的顺序是任意的,只要不修改字典,它们仍然直接对应:

Keys and values are iterated over in an arbitrary order which is non-random, varies across Python implementations, and depends on the dictionary’s history of insertions and deletions. If keys, values and items views are iterated over with no intervening modifications to the dictionary, the order of items will directly correspond.

来源4.10.1. Dictionary view objects

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com