如何在字典中减去两个值

时间:2018-11-27 02:42:42

标签: python loops dictionary

我需要在多个ID的字典中​​减去两个值(开始和结束)。我需要一个循环,可以对每个值执行此操作,并将该值保存在新字典中。

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

字典的示例输出是 {'30639':{'start':1296184417.509661,'end':1296184417.51007,'ttl':'3','ip':'128.192.254.49','id':'30639'},

1 个答案:

答案 0 :(得分:0)

您可能正在尝试同时比较多个键。在Python的嵌套dict结构中,您必须遍历每个父键(在您的情况下,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。