主要问题是如何使用两个dicts迭代/指示正确?
我已经给出了两个我需要比较的词组(d1, d2)
。如果两者中的键i相同,则由于给定的功能而遵循操作。结果进入另一个字典(dict1
)。如果d1 or d2
中的任何一个包含密钥i,则值会转到dict2
。返回值为tup = (dict1, dict2)
。这是一个例子。
If f(a, b) returns a + b
d1 = {1:30, 2:20, 3:30, 5:80}
d2 = {1:40, 2:50, 3:60, 4:70, 6:90}
then dict_interdiff(d1, d2) returns ({1: 70, 2: 70, 3: 90}, {4: 70, 5: 80, 6: 90})
我正在努力用正确的方法来正确地指出两个d1和d2。这是我的代码:
def h(a, b):
return a > b
d2 = {1:40, 2:50, 3:60, 4:70, 6:90}
d1 = {1:30, 2:20, 3:30, 5:80}
def dict_interdiff(d1, d2):
dict1 = {}
dict2 = {}
for i in d1:
if i in d1 #and d2:
dict1[i] = h(d1[i], d2[i])
else:
dict[i] = d1[i] #or d2[i]
tup = (dict1, dict2)
return tup
我是否必须遍历d1和d2(for i in d1 and d2:
)?似乎我必须以某种方式集成两个给定的dicts以使for循环工作。
感谢任何提示!
答案 0 :(得分:0)
使用itertools.chain
获取您的dicts中所有键的可迭代内容。
from itertools import chain
def h(a, b):
return a > b
d2 = {1:40, 2:50, 3:60, 4:70, 6:90}
d1 = {1:30, 2:20, 3:30, 5:80}
def dict_interdiff(d1, d2):
dict1 = {}
dict2 = {}
for key in set(chain(d1, d2)):
if key in d1 and key in d2:
dict1[key] = h(d1[key], d2[key])
else:
dict2[key] = d1.get(key) or d2.get(key)
return dict1, dict2
答案 1 :(得分:0)
import itertools
def interdict(d1,d2):
dict1 = {}
dict2 = {}
for i in set(itertools.chain(d1, d2)):
if i in d1 and i in d2:
#whatever
elif i in d1:
#not in d2
else:
#not in d1
set
摆脱了重复。 itertools.chain
结合了词典中的两个键列表