dict1 = {a:10, b:15, c:20}
dict2 = {a:25, b:30, c:35}
我想输出的是:
dict3 = {a : (10, 25), b : (15, 30), c : (20, 35)}
以下是我所拥有的样本
dict1 = {'192.168.1.21':23,'127.0.0.1':5,'12.12.12.12':5,'55.55.55.55':10}
dict2 = {'192.168.1.21':27,'10.10.0.1':7,'127.0.0.1':1}
dict3 = {}
for dictionary in (dict1,dict2):
for k,v in dictionary.iteritems():
dict3[k] = dict3.get(k, 0) + v
任何人都可以帮助我吗
答案 0 :(得分:1)
我可能会这样做:
>>> dict1 = {'192.168.1.21':23,'127.0.0.1':5,'12.12.12.12':5,'55.55.55.55':10}
>>> dict2 = {'192.168.1.21':27,'10.10.0.1':7,'127.0.0.1':1}
>>> ds = dict1, dict2
>>> {k: tuple(d.get(k, 0) for d in ds) for k in set().union(*ds)}
{'55.55.55.55': (10, 0), '10.10.0.1': (0, 7), '12.12.12.12': (5, 0),
'127.0.0.1': (5, 1), '192.168.1.21': (23, 27)}
这使用了一些技巧。 set().union(*ds)
获取字典中所有键的并集:
>>> set().union(*ds)
set(['55.55.55.55', '10.10.0.1', '12.12.12.12', '192.168.1.21', '127.0.0.1'])
(帽子提示@JonClements。我曾经写过set.union(*(map(set, ds)))
,我从不喜欢set
的重复。)
tuple(d.get(k, 0) for d in ds)
从0
或每个字典中与键k
关联的值创建一个元组。
整个事情都包含在字典理解中,因此我们不需要任何其他循环。
答案 1 :(得分:0)
相反,请尝试写作:
for k in set(dict1.keys())|set(dict2.keys()):
dict3[k] = (dict1.get(k,0),dict2.get(k,0))
这将从两个词典中获取所有键,并将它们的值作为元组返回,就像您想要的那样。如果其中一个列表不存在该键,则返回零,但您可以将其更改为您可能需要的任何值。
所以:
dict1 = {'192.168.1.21':23,'127.0.0.1':5,'12.12.12.12':5,'55.55.55.55':10}
dict2 = {'192.168.1.21':27,'10.10.0.1':7,'127.0.0.1':1}
它将返回:
dict3 = {'55.55.55.55': (10, 0), '10.10.0.1': (0, 7), '12.12.12.12': (5, 0),
'127.0.0.1': (5, 1), '192.168.1.21': (23, 27)}
答案 2 :(得分:0)
for dictionary in (dict1,dict2):
for k,v in dictionary.iteritems():
dict3[k] = dict3.get(k, 0) + v
在这里,您要添加0的值,从而产生单个值。你想要一个元组,所以对于这种方法,你需要从一个空元组开始并添加一个新值的单项元组:
dict3[k] = dict3.get(k, ()) + (v,)
我对这种方法的不满意在于,您正在迭代两个词典的所有项目,完全违背了使用词典的目的(通过键快速查找特定项目)。如果dict1
至少包含dict2
中的所有密钥,我会这样做:
dict3 = dict((key, (value1, dict2.get(key, 0))) for key, value1 in dict1.iteritems())
这将组合所有匹配的键,并为dict1中不存在于dict2中的每个键插入0。但是,如果dict2
也有dict1
没有的密钥,那么确保获得所有密钥的唯一方法就是迭代这两个字典。当然,您可能只关心dict1
的密钥(即您不需要查看没有匹配的源IP的目标IP),在这种情况下,这是正是你想要的。
答案 3 :(得分:0)
#You can use has_key() dictionary built in function#
for k,v in dict1.items()
if dict2.has_key(k):
dict3[k]=(v,dict2[k])