pythoni c способ избежать дублирования ключей словаря - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь создать словарь пар значений, но я не хочу, чтобы он был добавлен, если пара уже существует (даже в обратном порядке). Допустим, (0,1) уже есть, я не хочу (1,0). Это мой код, но я ищу более Pythoni c способ сделать это, я уверен, что есть один. PS. Я не могу использовать itertools для этого упражнения

    test = {(0,1):1, (0,2):2}
    for a in range(3):
        for b in range(3):
            if a!= b:
                if (b,a) not in test:
                    test[a,b]=4

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Если вам нужен способ убедиться, что (a, b) и (b, a) никогда не попадут в словарь, вы можете l oop следующим образом:

test = {(0,1):1, (0,2):2}
for a in range(3):
    for b in range(a+1, 3):
        if (b,a) not in test.keys(): #pretty sure it's better to ask for .keys()
            test[a,b]=4

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

test = {set((0,1)):1, set((0,2)):2}
for a in range(3):
    for b in range(3):
        if a!= b:
            if set((b,a)) not in test.keys():
                test[set(a,b)]=4
0 голосов
/ 03 апреля 2020

Я не уверен, почему это не Pythoni c.

Я бы, однако, удостоверился, что (a, b) присутствует в dict, только если a <= b, что означает Вам не нужно каждый раз проверять обе пары - только одну из них. </p>

...