#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. Хорошее решение. Сначала убедитесь, что значения отсортированы по ключу.