我有一个带有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
我希望这能有所帮助!