我有一个带有从1到N的键的字典。我想通过双循环来浏览这个字典,这样我就不会同时使用两个元素(k从1变为N-1和j从k + 1到N)。我需要有效地完成此操作,因为我将不得不重复此操作。无论如何都要做字典理解,以便通过键:k从1变为N-1,j从k + 1变为N?
答案 0 :(得分:5)
如果按键顺序无关紧要,可以这样做
my_dict = {"a": 1, "b": 2, "c": 3, "d": 4}
from itertools import combinations
for key1, key2 in combinations(my_dict.keys(), r = 2):
print key1, key2
<强>输出强>
a c
a b
a d
c b
c d
b d
答案 1 :(得分:1)
根据你的描述,听起来你正试图访问一个数组(应该是)的上三角形,所以你可以使用numpy的triu
(http://docs.scipy.org/doc/numpy/reference/generated/numpy.triu.html)。
正如其他人所说,使用字典可能不是最佳选择。
答案 2 :(得分:1)
在上“我想要做的是浏览字典中的所有对象并计算它们之间的距离”
你可以使用numpy广播来计算距离,它很快:
In [175]: locs=np.array([1,2,4,6])
In [176]: np.abs(locs[:, None]-locs)
Out[176]:
array([[0, 1, 3, 5],
[1, 0, 2, 4],
[3, 2, 0, 2],
[5, 4, 2, 0]])
您可以使用索引,例如locs[0][3]
来直接获取元素0和元素3之间的距离。