【问题标题】:Slicing and summing dictionaries in Python在 Python 中对字典进行切片和求和
【发布时间】:2018-08-14 10:10:23
【问题描述】:

我想对按键切片的字典部分求和字典值。下面的例子是断章取义的。我试图将代码简化为基本内容。最后一行描述了这个问题。我尝试分割多个周期并对值求和。

TypeError: unhashable type: 'slice'

stuff = [38, 255, 837]

dict = {}

for t in range(50):
    dict[t] = [(stuff[i] / (1.03)**t) for i in range(3)]

    sum(dict[int(t):int(t+5)][0])

【问题讨论】:

  • 期望的输出是什么?
  • 标准字典不排序。 dict[1:3] 应该是什么意思?并且不要调用你的字典dict - you shadow a builtin function
  • 输出是一个字典,显示范围(50)内所有年份的(滚动)总和。这是关于将某些时期的值(在 t 和 t+5 之间的示例中)归因于模型中的特定年份
  • @Kevin 在问题中显示确切的输出(如有必要,可提供较小的示例)
  • @MrT 我认为它应该是指字典的前 3 个条目,按它们的键排序

标签: python dictionary slice


【解决方案1】:

你的语法不可能用字典。但是你可以定义一个函数来执行求和:

stuff = [38, 255, 837]

d = {t: [(stuff[i] / (1.03)**t) for i in range(3)] for t in range(50)}

def slice_sum(d, start, end, i=0):
    return sum(v[i] for k, v in d.items() if start <= k < end)

result = {n: slice_sum(d, n, n+5) for n in range(50)}

# {0: 179.24973930679405,
#  1: 174.02887311339228,
#  2: 168.960070983876,
#  3: 164.03890386784076,
#  4: 159.26107171635024,
#  5: 154.62239972461188,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2017-06-22
    • 2021-05-03
    • 2021-05-11
    • 2011-01-20
    • 2017-03-19
    • 1970-01-01
    相关资源
    最近更新 更多