【问题标题】:I cannot seem to offset iterator in loop我似乎无法在循环中偏移迭代器
【发布时间】:2019-06-13 15:18:31
【问题描述】:

我正在尝试使用偏移量 [i+1] 循环遍历迭代器。

我已经列举了我的字典。现在我想使用偏移第二个数据帧的函数访问dfc

dfc = dict() 
mydict = {1: 6, 2: 4,3: 10, 4: 7, 5: 3}
for i, (k, v) in enumerate(mydict.items()):
    dfc[(i)] = v
    print("index: {}, key: {}, value: {}".format(i, k, v))      

for i in range(0,5,1):
   result[i] = dfc[i] * dfc[i+1]

但是我收到了这个错误:

  File "<ipython-input-139-b31501e8f8af>", line 2, in <module>
    result[i] = dfc[i] * dfc[i+1]

KeyError: 5

【问题讨论】:

  • dfc 的键从 0 到 4(参见枚举部分),而不是从 1 到 5。因此你得到一个 KeyError。
  • 如果你想将你的“数据框”的一个“行”添加到下一个“行”,请记住总会有一个缺失:你不能遍历所有项目,因为什么会是最后一项的下一项吗?
  • 啊,非常感谢...这个偏移量可以直接应用于字典键值吗?对于 dfb 中的 k:adf_19 = dfb[k] adf_20 = np.dot(dfb[k+1], dfb[k])

标签: python loops iterator offset


【解决方案1】:

您访问不存在的密钥,这就是错误的原因。你可以解决这个问题:

mydict = {1: 6, 2: 4, 3: 10, 4: 7, 5: 3}
# there is no sense in creating dfc - if you need a dublicate, use dfc = dict(mydict)
sorted_keys = sorted(mydict) # sort keys - dicts are unordered / insert ordered from 3.7 on

for k in sorted_keys: 
    print(f"index: {k}, key: {k}, value: {mydict[k]}")

result = {}
for i in sorted_keys:
    result[i] = mydict[i] * mydict.get(i+1,1)  # avoid key error, if not existst, mult by 1

for k in sorted_keys: 
    print(f"index: {k}, key: {k}, value: {result[k]}")

输出:

index: 1, key: 1, value: 6
index: 2, key: 2, value: 4
index: 3, key: 3, value: 10
index: 4, key: 4, value: 7
index: 5, key: 5, value: 3

index: 1, key: 1, value: 24
index: 2, key: 2, value: 40
index: 3, key: 3, value: 70
index: 4, key: 4, value: 21
index: 5, key: 5, value: 3

使用dict.get(key,default) 允许尝试获取该值,如果不存在则允许使用默认1。 1*无论什么都不会改变结果。

Why dict.get(key) instead of dict[key]?

【讨论】:

    猜你喜欢
    • 2015-05-22
    • 2021-11-17
    • 2018-01-14
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多