我有一个名为Polynomial的类,它将信息存储在字典中的多项式中。键是指数,值是系数。要创建Polynomial类的实例,请键入以下内容:
P1 = Polynomial((2, 14), (2, 11), (-12, 3), (42, 0))
配对中的第一项是系数,第二项是指数。
初始化如下所示:
class Polynomial:
def __init__(self, *termpairs):
termdict = dict(termpairs)
self.termdict = {}
for x, y in termdict.items():
self.termdict[y] = x
现在,如果我有两个相同的系数,例如((2,14),(2,11)),它只会为其中一个创建一个字典,如下所示:
{11: 2}
我不确定为什么配对没有出现。有什么想法吗?
答案 0 :(得分:2)
字典每个键有一个值。 self.termdict[11]
会返回什么?
答案 1 :(得分:2)
问题在于:
termdict = dict(termpairs)
您正在将您的termpairs
“转换”为词典,因此您会得到类似的内容:
((2, 14), (2, 11), (-12, 3), (42, 0)) => {2: 14, 2: 11, -12: 3, 42: 0}
在dict
中,不能有两个具有相同键的项目,因此第二个项目(2: 11
)将覆盖第一个项目(2: 14
)。
编辑:为什么要将它转换为dict
?这将是一个更简单的解决方案(没有dict
转换):
def __init__(self, *termpairs):
self.termdict = {}
# termpairs is a tuple of tuples
for x, y in termdict:
self.termdict[y] = x
答案 2 :(得分:2)
因为您的词典termdict
(不是self.termdict
)将系数映射到权力,所以相同的系数仅强制使用第二个(即(2, 11)
删除(2, 14)
)。相反,您希望用以下代码替换您的类:
class Polynomial:
def __init__(self, *termpairs):
termdict = dict([ (b, a) for a, b in termpairs ])
self.termdict = {}
for x, y in termdict.items():
self.termdict[x] = y
答案 3 :(得分:1)
这是你的罪魁祸首:
termdict = dict(termpairs)
这会创建一个字典,其中键是系数,值是指数。由于它是字典,因此每个键都指向一个值,因此此时您将失去(2, 14)
对 - 使用键2
的项不能超过一个。然后你继续切换它们没有区别;你已经放弃了一些数据。
我不确定你为什么要把它们放在字典中开始,然后迭代它以制作第二个字典。为什么不把它们放在你想要开始的方式?
self.termdict = dict(reversed(pair) for pair in termpairs)
答案 4 :(得分:0)
每次添加到字典时,您都会覆盖旧值,您需要执行一些操作,例如将值添加到列表中并将该列表存储为值。
字典结构如下:
{ 2:[14,11], -12:[3], 42:[0] }
并允许您存储多对。
答案 5 :(得分:0)
您不需要创建termdict
字典,只需迭代元组的项目(未经测试):
class Polynomial(object):
def __init__(self, *termpairs):
self.termdict = {}
for x, y in termpairs:
self.termdict[y] = x