python - 将每个键的值作为数组存储在字典中
问题描述
我想规范化字典中的所有值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 statement
来克服这个问题,但我不能将每个键的值存储为一个 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
,虽然它包含一个零值,如果它是键,有没有更好的解决方案来规范它,因为我认为我的解决方案效率不高!
PS:我尝试在 for 循环的末尾norm[k]= np.array(values)
而不是, norm[k]=values
但结果不符合要求。
解决方案
append
如上所述,将一个元素添加到列表中,并且该元素可以是一个列表,这就是为什么您当前在列表中有一个列表。理想情况下,您应该使用extend
which 将第一个列表与另一个列表连接起来。
推荐阅读
- python - tf.map_fn的不同分支如何使用不同的卷积层?
- fortran - 除了我们选择的元素之外,如何对向量的所有元素求和?
- ruby-on-rails - 无法为 nuxtServerInit 设置 cookie
- python - 将 InfluxDB 的价值转化为可用的数字
- r - R - 在多个数据框中替换列名中的模式
- mysql - 这些查询 MySQL 日期范围之间有什么区别
- spring-boot - Spring-Kafka Producer 在所有代理都关闭时重试
- node.js - 在 react 中从 express 下载本地 txt 文件
- android - 执行函数后如何获取对象的值?
- sql - 在 id 介于 DB2 sql 中该组的最小和最大 id 之间时插入行