我正在尝试制作一个由值对组成的字典,但是如果该对已经存在(甚至颠倒了),我不希望添加它。 假设(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
答案 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)包含在字典中,这意味着您不必每次都检查两个对-只需检查其中一对。