求和python字典中的每个元素以查找TCP标志



我有一个带有TCP标志的字典:我需要将这个字典中两个元素的所有可能性相加,以找到我所拥有的标志的相应值。示例:

flag = 24
di = {'urg': 32, 'ack': 16, 'psh': 8, 'rst': 4, 'syn': 2, 'fin': 1}

如我们所见,24对应于ack(16(+psh(8(=24如何添加sum元素来查找和显示活动标志?谢谢

使用位运算符AND-&

例如:

flag = 24
di = {'urg': 32, 'ack': 16, 'psh': 8, 'rst': 4, 'syn': 2, 'fin': 1}
flags = [k for k, v in di.items() if v & flag]
print(flags)

打印:

['ack', 'psh']

两个字典项的总和

如果你要找的只是ack + psh,并且你知道钥匙,那么你的答案就是

answer = di['ack'] + di['psh']

所有字典项的总和

如果你真的想得到所有字典项的总和,我建议使用一个函数,它接受字典和标志,并返回字典的键的元组,这些键的总和与标志相加。这里有一个例子:

def find_keys(di, flag):
keys = di.keys()
values = di.values()
for n in range(len(keys)):
for m in range(len(keys) - m)):
if values[n] + values[m] == flag:
return (keys[n], keys[m])
# If none are found, it can return some error value:
return (-1, -1)

在您的代码中,您可以使用给定的di、flag和get:来运行它

keys = find_keys(di, flag)
print(keys)
print((di[keys[0]] + di[keys[1]]) == flag)

你应该得到:

('ack', 'psh')
True

我希望这能有所帮助!

最新更新