Как вычислить разницу между значениями в словаре

#python-3.x

#python-3.x

Вопрос:

У меня словарь выглядит так

 time = {"0": 1552644000109, 
"1": 1552644000113, 
"2": 1552644000116, 
"3": 1552644000116, 
"4": 1552644000118, 
"5": 1552644000119, 
"6": 1552644000119, 
"7": 1552644000120, 
"8": 1552644000121, 
"9": 1552644000122, 
"10": 1552644000123, 
"11": 1552644000123, 
"12": 1552644000124}
  

Я пытаюсь вычислить разницу между 0-1 и 1-2 и 2-3 и так далее .. чтобы написать другой код, который if the difference is > x; do this

Вот мой код:

 I converted the keys into integer 

inttime = {int(k):int(v) for k,v in time.items()}
for k,v in inttime.items():
        a=  inttime[k 1][0]-inttime[k][0]
        print(a)
  

Вот моя ошибка:

 TypeError: 'int' object is not subscriptable

  

Комментарии:

1. Удалите [0] из обоих мест. inttime[someNumber] уже возвращает указанное целочисленное значение (следовательно int , не может быть подписано).

2. Готово, спасибо! последнее k 1 становится 13 и выдает ошибку в последнем цикле. Какие-либо приемы, чтобы предотвратить это?

3. if k == len(inttime): break ?

4. если k == len(inttime) -1: break — сработало, спасибо

5. Да, вы поняли.

Ответ №1:

Простой способ решить проблемы как таковые — объединить списки значений, когда один из списков немного сдвинут. Таким образом:

 >>> values = list(time.values())
>>> shifted = values[1:]
>>> differences = [next_val - current for current, next_val in zip(values, shifted)]

>>> differences
[4, 3, 0, 2, 1, 0, 1, 1, 1, 1, 0, 1]
  

Комментарии:

1. Хорошее решение. Сначала убедитесь, что значения отсортированы по ключу.