我需要在多个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'},
答案 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。