создание словаря Python - PullRequest
       3

создание словаря Python

0 голосов
/ 30 ноября 2011

У меня есть класс с именем 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 ]

2 голосов
/ 30 ноября 2011

Поскольку ваш словарь 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
2 голосов
/ 30 ноября 2011

Проблема здесь:

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 голосов
/ 30 ноября 2011

Словарь имеет одно значение для каждого ключа. Что бы self.termdict[11] вернулось бы в противном случае?

1 голос
/ 30 ноября 2011

Это ваш виновник:

termdict = dict(termpairs)

Это создает словарь, в котором ключи - это коэффициенты, а значения - показатели степени.Поскольку это словарь, каждый ключ указывает на одно значение, поэтому в этот момент вы теряете пару (2, 14) - не может быть более одного элемента с ключом 2.То, что вы затем продолжаете переключать их, не имеет значения;Вы уже сбросили некоторые данные на пол.

Я не уверен, почему вы помещаете их в словарь для начала, а затем повторяете это, чтобы создать второй словарь.Почему бы просто не поставить их так, как вы хотите начать?

self.termdict = dict(reversed(pair) for pair in termpairs)
0 голосов
/ 30 ноября 2011

Вам не нужно создавать словарь termdict, просто переберите элементы кортежа (не проверено):

class Polynomial(object):
    def __init__(self, *termpairs):
        self.termdict = {}
        for x, y in termpairs:
            self.termdict[y] = x
0 голосов
/ 30 ноября 2011

Вы перезаписываете старые значения каждый раз, когда добавляете в словарь, вам нужно что-то сделать, например, добавить значения в список и сохранить этот список в качестве значения.

структура словаря будет выглядеть так:

{ 2:[14,11], -12:[3], 42:[0] }
и позволит вам хранить несколько пар.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...