как вычесть два значения в словаре - PullRequest
0 голосов
/ 27 ноября 2018

Мне нужно вычесть два значения (начало и конец) в словаре нескольких идентификаторов.Мне нужен цикл, который может сделать это для каждого значения и сохранить значение в новом словаре.

m = re.findall(r'([0-9]*\.[0-9]*) IP [(]tos 0x0, ttl ([0-9]*), id ([0-9]*)', x)   
for num2, ttl, id in m:
dicts[id] = {'start': float(num2),'ttl': ttl,'id': id,'ip': '','end': 0}

m2 = re.findall(r'(\n[0-9]+\.[0-9]*) IP.*proto ICMP.*\n.*(\b[0-9]{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b) >.*\n.*id ([0-9]+)', x)
for num1, ip2, id in m2:
 num1s = {'end': float(num1)}
 dicts[id].update(num1s)
 dicts[id].update({'ip': ip2})

for start, end in dicts[id]:
  total = end - start

пример вывода dicts: {'30639': {'start': 1296184417.509661, 'end': 1296184417.51007, 'ttl': '3', 'ip': '128.192.254.49', 'id': '30639'},

1 Ответ

0 голосов
/ 27 ноября 2018

Возможно, вы пытаетесь сравнить несколько ключей одновременно.Во вложенной структуре dict в Python вы должны выполнять итерацию по каждому родительскому ключу (в вашем случае id), а затем сравнивать дочерний ключ (и) / значение (значения) (безопасно).

Вот что вы должны сделать:

for id in dicts:
   totals = dicts[id].get('end', 0) - dicts[id].get('start', 0)
   #--do whatever with totals

Например: dicts[id].get('end', 0) безопасно ищет значение, соответствующее ключу 'end', и, если оно не находит его, возвращает 0.

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