gpt4 book ai didi

python - 将每个键的值存储为字典中的数组

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:15 24 4
gpt4 key购买 nike

我想规范化字典 data 中的所有值,并将它们再次存储在另一个具有相同键的字典中,对于每个键,值应该存储在一维数组中,所以我做了以下操作:

>>> data = {1: [0.6065306597126334], 2: [0.6065306597126334, 0.6065306597126334, 0.1353352832366127], 3: [0.6065306597126334, 0.6065306597126334, 0.1353352832366127], 4: [0.6065306597126334, 0.6065306597126334]}

>>> norm = {k: [v / sum(vals) for v in vals] for k, vals in data.items()}

>>> norm
{1: [1], 2: [0.4498162176582741, 0.4498162176582741, 0.10036756468345168], 3: [0.4498162176582741, 0.4498162176582741, 0.10036756468345168], 4: [0.5, 0.5]}

现在假设字典 data 只包含其中一个键的零值,例如第一个键 1 的值:

>>> data = {1: [0.0], 2: [0.6065306597126334, 0.6065306597126334, 0.1353352832366127], 3: [0.6065306597126334, 0.6065306597126334, 0.1353352832366127], 4: [0.6065306597126334, 0.6065306597126334]}

然后归一化这个字典的值将得到 [nan] 值,因为除以零

>>> norm = {k: [v / sum(vals) for v in vals] for k, vals in data.items()}

__main__:1: RuntimeWarning: invalid value encountered in double_scalars
>>> norm
{1: [nan], 2: [0.4498162176582741, 0.4498162176582741, 0.10036756468345168], 3: [0.4498162176582741, 0.4498162176582741, 0.10036756468345168], 4: [0.5, 0.5]}

所以我插入了一个 if 语句 来解决这个问题,但我无法将每个键的值存储为 ID 数组

代码

>>> norm = {}
>>> for k, vals in data.items():
... values = []
... if sum(vals) == 0:
... values.append(list(vals))
... else:
... for v in vals:
... values.append(list([v/sum(vals)]))
... norm[k]=values
...
>>> norm
{1: [[1.0]], 2: [[0.4498162176582741], [0.4498162176582741], [0.10036756468345168]], 3: [[0.4498162176582741], [0.4498162176582741], [0.10036756468345168]], 4: [[0.5], [0.5]]}

我想获取 norm 字典作为

norm = {1: [1.0], 2: [0.4498162176582741, 0.4498162176582741, 0.10036756468345168], 3: [0.4498162176582741, 0.4498162176582741, 0.10036756468345168], 4: [0.5, 0.5]}

此外,对于字典 data,虽然它包含一个零值,如果它是键,是否有更好的解决方案来规范化它,因为我认为我的解决方案效率不高!

P.S:我在 for 循环的末尾尝试 norm[k]= np.array(values) 而不是 norm[k]=values 但结果不符合要求。

最佳答案

如回答中所述,extend 可用于解决您的问题。如果您确实想使用 append,您可以使用列表的第一个元素。

norm = {}
for k, vals in data.items():
values = []
if sum(vals) == 0:
values.append(vals[0])
else:
for v in vals:
values.append([v / sum(vals)][0])
norm[k] = values

参见 difference between append vs extend list methods in python以追加与扩展为例

至于优化。完全删除 for 循环是不可能的,但您可以缩短您的解决方案,同时仍保持可读性:

norm = {}
for k, vals in data.items():
if sum(vals) == 0:
norm[k] = vals
else:
norm[k] = [x / sum(vals) for x in vals]

关于python - 将每个键的值存储为字典中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55279018/

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