【发布时间】:2018-09-04 06:05:27
【问题描述】:
我有一本字典:
inds = [0, 3, 7, 3, 3, 5, 1]
vals = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]
d = {'inds': inds, 'vals': vals}
print(d) 会得到我:{'inds': [0, 3, 7, 3, 3, 5, 1], 'vals': [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]}
如您所见,inds(keys) 没有排序,有重复,也有缺失:范围是 0 到 7,但只有 0,1,3,5,7 个不同的整数。我想编写一个函数来获取字典 (d) 并将其解压缩为一个完整的向量,如下所示。对于任何重复的索引(在这种情况下为 3),我想对相应的值求和,而对于缺失的索引,我想要 0.0。
# ind: 0 1 2 3* 4 5 6 7
x == [1.0, 7.0, 0.0, 11.0, 0.0, 6.0, 0.0, 3.0]
试图编写一个返回最终列表的函数......像这样:
def decompressor (d, n=None):
final_list=[]
for i in final_list:
final_list.append()
return(final_list)
# final_list.index: 0 1 2 3* 4 5 6 7
# final_list = [1.0, 7.0, 0.0, 11.0, 0.0, 6.0, 0.0, 3.0]
【问题讨论】:
-
分享您的错误代码。
-
您的问题陈述不是很清楚,请您详细说明您的示例代码!?
-
@SadiaArif 添加了更多上下文
-
神秘问题得到神秘的答案:
[d.get(i, 0) for d in [{k:sum(v for _, v in g) for k, g in groupby(sorted(zip(inds, vals)), lambda x:x[0])}] for i in range(max(d))]并确保首先from itertools import groupby... -
@juanpa.arrivillaga - 总比没有好,谢谢。我试过这个,但这只会让我得到 [1.0, 7.0, 0, 5.0, 0, 6.0, 0],而不是 [1.0, 7.0, 0.0, 11.0, 0.0, 6.0, 0.0, 3.0]
标签: python python-3.x dictionary