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