python字典创建
我有一个叫做多项式的类,它将信息存储到字典中的多项式中。键是指数,值是系数。要创建多项式类的实例,请键入以下内容:python字典创建,python,dictionary,Python,Dictionary,我有一个叫做多项式的类,它将信息存储到字典中的多项式中。键是指数,值是系数。要创建多项式类的实例,请键入以下内容: P1 = Polynomial((2, 14), (2, 11), (-12, 3), (42, 0)) 配对中的第一项是系数,第二项是指数 初始化如下所示: class Polynomial: def __init__(self, *termpairs): termdict = dict(termpairs) self.termdict = {} for
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}
我不知道为什么一对没有出现。有什么想法吗?一本字典每个键有一个值。否则,self.termdict[11]会返回什么?问题在于:
termdict = dict(termpairs)
您正在将术语对
“转换”为dict,因此您将得到如下结果:
((2, 14), (2, 11), (-12, 3), (42, 0)) => {2: 14, 2: 11, -12: 3, 42: 0}
在dict
中,不能有两个项目具有相同的键,因此第二个(2:11
)将覆盖第一个(2:14
)
编辑:您为什么要将其转换为dict
?这将是一个更简单的解决方案(无需dict
转换):
每次添加到字典时,您都会覆盖旧值,您需要执行一些操作,例如将值添加到列表中并将该列表存储为值 字典结构如下所示:
{2:[14,11],-12:[3],42:[0]}
因为你的字典
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
这就是你的罪魁祸首:
termdict = dict(termpairs)
这将创建一个字典,其中键是系数,值是指数。由于它是一个字典,每个键都指向一个值,因此此时您将丢失(2,14)
对-不能有多个项具有键2
。然后你继续切换它们也没什么区别;你已经把一些数据丢在地板上了
我不知道你为什么一开始就把它们放在字典里,然后再重复一遍,做第二本字典。为什么不按照你想要的方式开始呢
self.termdict = dict(reversed(pair) for pair in termpairs)
您不需要创建
termdict
字典,只需迭代元组的项(未测试):
那里没有演员,是的,就是这样。我真的不知道为什么我要编一本新词典,谢谢你指出这一点。@kindall:我知道casting不是一个词,但我想不出更好的,建议?你两天前发布时,指数/系数对与键/值对正确匹配。怎么搞的?
self.termdict = dict(reversed(pair) for pair in termpairs)
class Polynomial(object):
def __init__(self, *termpairs):
self.termdict = {}
for x, y in termpairs:
self.termdict[y] = x