避免重复的字典键的pythonic方法

时间:2020-04-02 21:09:47

标签: python dictionary

我正在尝试制作一个由值对组成的字典,但是如果该对已经存在(甚至颠倒了),我不希望添加它。 假设(0,1)已经存在,我不想(1,0)。 这是我的代码,但是我正在寻找一种更pythonic的方式,我敢肯定有一种。 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 :(得分:0)

如果您想要一种确保(a,b)和(b,a)都不会进入字典的方法,可以这样循环:

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

答案 1 :(得分:-1)

我不确定为什么这不是Pythonic。

但是,我将确保仅当a <= b时才将(a,b)包含在字典中,这意味着您不必每次都检查两个对-只需检查其中一对。