python字典创建

时间:2011-11-30 05:24:15

标签: python dictionary

我有一个名为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}

我不确定为什么配对没有出现。有什么想法吗?

6 个答案:

答案 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