Я не могу сместить итератор в цикле - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь перебрать итератор со смещением [i + 1].

Я перечислил свой dict.Теперь я хочу получить доступ к 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

1 Ответ

0 голосов
/ 13 июня 2019

Вы получаете доступ к несуществующим ключам, поэтому ошибка.Вы можете исправить это:

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 * все, что не изменит результат.

См. Почему dict.get (ключ) вместо dict [ключ]?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...