我有此格式的列表:
some_list = [[-5, 1000],
[0, 600],
[50, 600],
[100,700],
[170,650],
[190,700]]
,并且函数返回值应该是带有-5,-4,-3 ...键的结果字典,其值是每个键的增量之和。因此上面的示例应该是-5:0,-4:1000,-3:2000,-1:3000、0:4000、1:4600及更高
这是部分起作用的代码。问题是while语句需要一个上限进行检查,因此我在列表的末尾添加了其他项。假设可以用一种更为优雅的方式解决此问题。另外,由于break语句,当前代码还排除了列表的最后一项。
def framegen(some_list):
n = 0
ys = some_list[0][0]
frame = []
xpos = []
x2 = 0
for i in some_list:
while (some_list[n][0]) <= ys < (some_list[(n+1)][0]):
x1 = ys
frame.append(x1)
xpos.append(x2)
x2 += some_list[n][1]
ys += 1
if n == len(some_list) -2 :
break
else:
n += 1
temp_dic = dict(zip(frame, xpos))
dic = {}
for n in temp_dic:
dic[n] = temp_dic[n] - temp_dic[0]
return dic
编辑:
预期输出:
{ -5 : 0 ,
-4 : 1000 ,
-3 : 2000 ,
-2 : 3000 ,
-1 : 4000 ,
0 : 5000 ,
1 : 5600 ,
2 : 6200 ,
....}
答案 0 :(得分:1)
您可以执行以下操作,在每个时间间隔内进行迭代,并根据先前的值填充字典。
代码:
some_list = [[-5, 1000],
[0, 600],
[50, 600],
[100,700],
[170,650],
[190,700]]
d = dict()
for s, e in zip(some_list[:-1], some_list[1:]):
for k in range(s[0], e[0] + 1):
if k not in d:
d[k] = d.get(k-1, -s[1]) + s[1]
输出
>>> d
{-5: 0,
-4: 1000,
-3: 2000,
-2: 3000,
-1: 4000,
0: 5000,
1: 5600,
2: 6200,
3: 6800,
4: 7400,
...
181: 121150,
182: 121800,
183: 122450,
184: 123100,
185: 123750,
186: 124400,
187: 125050,
188: 125700,
189: 126350,
190: 127000}