我有四个类似长度的词典。
我想:
获取四者之间匹配的密钥。
迭代每个字典中的某个值,稍后我将对其进行比较并进行一些算术运算。
我已经使用嵌套循环(四个循环)完成了这一点,但这看起来效率不高。我想让这段代码更高效,更优雅。
我想在不进行嵌套循环的情况下这样做:
d1 = {1:18:[['28','Y','N'],['108','A','M'],...]
d2,d3 and d4 are the same thing expect different values but some will have same keys
for k, v in di1.iteritems():
for v1 in v:
for k2,v2 in di2.iteritems():
for va2 in v2:
if k == k2:
for k3,v3 in di3.iteritems():
for va3 in v3:
if k2 == k3:
for k4,v4 in di4.iteritems():
for va4 in v4:
if k3==k4 and k==k4 and k==k3:
# do some arithmetics on dictionary's values for all four dictionaries
提前多多感谢。
答案 0 :(得分:1)
如果他们有相同的密钥,那么di1.keys() == di2.keys() == di3.keys() == di4.keys()
。
keys = di1.keys()
for k in keys:
# do something with di1[k] di2[k] di3[k] di4[k]
如果他们都没有密钥,请构建密钥的联合集,并使用in
检查每个密钥的哪个dict:
keys = set(di1.keys()) | set(di2.keys()) | set(di3.keys()) | set(di4.keys())
for k in keys:
if k in di1:
# di1 has the key
if k in di2:
# di2 has the key
if k in di1 and k in di2:
# do something with di1[k] and di2[k]
# ...
答案 1 :(得分:0)
1)我假设"获得在四个"之间匹配的那些键。表示您要查找所有四个词典中存在的键。实现此目的的一种方法是取四个sets键的交集。
common_keys = set(d1.keys()) & set(d2.keys()) & set(d3.keys()) & set(d4.keys())
2)迭代公共密钥,并对所有四个字典的字典值进行一些算术运算":
for key in common_keys:
for dict in [d1, d2, d3, d4]:
# do something with dict[key]...
如果您希望避免嵌套循环,也可以使用列表推导,例如:生成一个(键,元组列表)对的列表,然后对其进行操作:
common_keys_vals = [(key, [dict[key] for dict in [d1, d2, d3, d4]])
for key in common_keys]