【问题标题】:Loop over list and increment with values to dictionary循环列表并用值递增到字典
【发布时间】:2020-04-28 22:46:48
【问题描述】:

我有一个这种格式的列表:

some_list = [[-5, 1000], 
           [0, 600], 
           [50, 600],
           [100,700],
           [170,650],
           [190,700]]

并且函数 return 应该是带有键 -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 ,
....}

【问题讨论】:

  • 我不太明白你想要的结果字典是什么。请edit您的问题并显示相同输入的期望结果。
  • 编辑了预期的输出。感谢您的调查。
  • 您能否详细说明如何计算预期输出?不太清楚。
  • 列表中的第一项是“计数器”,最后一项是乘数。所以从 -15 到 0,每步 1 应增加 1000。从 0 到 100,每步 1 的增量为 600,依此类推。最后一项增量可能应该被赋予 None 作为值,因为它没有被使用。生成的字典应该在列表中的最后一项停止,即 190。
  • 预期输出末尾的....} 表明还有更多内容未显示。什么时候停止?

标签: python list dictionary for-loop nested-lists


【解决方案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}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 2017-05-30
    • 2021-12-03
    • 2021-07-05
    • 1970-01-01
    • 2011-01-25
    相关资源
    最近更新 更多