【发布时间】:2016-05-28 02:55:34
【问题描述】:
我是 python 新手,遇到了这个问题,因为英语不是我的母语,所以我在解决这个问题时遇到了一些麻烦,但我写了我的代码,因为我从这个问题中了解到,任何人都可以判断我是否正确如果不是,请改进我的代码或提供您的代码
假设您有两个字典 d1 和 d2,每个字典都有整数键和整数值。还给你一个函数 f,它接受两个整数,对它们执行未知操作,然后返回一个值。
编写一个名为 dict_interdiff 的函数,它接收两个字典(d1 和 d2)。该函数将返回两个字典的元组:d1和d2相交的字典和d1和d2差的字典,计算如下:
'''Intersect:相交字典的键 是 d1 和 d2 中通用的键。 要获取相交字典的值, 查看 d1 和 d2 中的公共键并应用 这些键的值的函数——值 d1 中的公共密钥的第一个参数是 d2中的函数和公共键的值 是函数的第二个参数。 不要在你的 dict_interdiff 代码中实现 f —— 假设它是在外部定义的。
差异:差异字典中的键值对是 (a) 每个键值对 在 d1 中,其密钥仅出现在 d1 中而不出现在 d2 中或 (b) 每个 d2 中的键值对 键只出现在 d2 中,而不出现在 d1 中。'''
这里有两个例子:*
'''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})
If f(a, b) returns a > b
d1 = {1:30, 2:20, 3:30}
d2 = {1:40, 2:50, 3:60}
then dict_interdiff(d1, d2)
returns ({1: False, 2: False, 3: False}, {})'''
这是我的代码:
def dict_interdiff(d1, d2):
a=d1.keys()
b=d2.keys()
c=d1.values()
d=d2.values()
e=()
u={}
f=[]
g=[]
for i in range(max(a,b)):
if a[i]==b[i]:
u=f(a[i],b[i])
elif a[i] not in b:
t=c.find(a[i])
f.append(c[t])
g.append(a[i])
k=dict(zip(g,f))
elif b[i] not in a:
t=c.find(b[i])
f.append(d[t])
g.append(b[i])
k=dict(zip(g,f))
e+(u,)+(k,)
return e
此外,我无法检查我的代码,因为它假定 f 已定义但我不知道,因此无法在我的解释器中运行
【问题讨论】:
-
我刚刚定义了
f:def f(a, b): return a + b,但是没有用:Traceback (most recent call last): File "test.py", line 30, in <module> print(dict_interdiff({1:30, 2:20, 3:30, 5:80}, {1:40, 2:50, 3:60, 4:70, 6:90})) File "test.py", line 14, in dict_interdiff for i in range(max(a,b)): TypeError: range() integer end argument expected, got list. -
@zondo 你能改进我的代码还是给你的解决方案
-
我想我做不到。我试图通过说
max(len(a), len(b))而不是max(a, b)来解决这个问题,但我又遇到了另一个我不知道如何解决的错误。 -
您正在查看这些字典,就好像它们是数组一样,这不是一个有用的方法。字典是散列 - 键和相关值。考虑这些键可能是 ANYTHING 而不是整数,您可以看到访问器失败的原因。请参阅下面的示例解决方案...
-
如果你想要来自 a 和 b 的唯一密钥,区别在于对称差异
标签: python python-2.7