python中字典中的Double for循环

python中字典中的Double for循环,python,dictionary,Python,Dictionary,我有一个键从1到N的字典。我想用双for循环遍历这个字典,这样我就不会同时获取两个元素(k从1到N-1,j从k+1到N)。我需要有效地执行此操作,因为我将不得不重复此操作。有没有必要做一个字典理解,以便通过如下键:k从1变为N-1,j从k+1变为N?根据您的描述,听起来好像您试图访问数组的上三角(应该是什么),因此您可以使用numpy的triu() 正如其他人所说,使用字典可能不是最好的选择。如果键的顺序不重要,您可以这样做 my_dict = {"a": 1, "b": 2, "c": 3,

我有一个键从1到N的字典。我想用双for循环遍历这个字典,这样我就不会同时获取两个元素(k从1到N-1,j从k+1到N)。我需要有效地执行此操作,因为我将不得不重复此操作。有没有必要做一个字典理解,以便通过如下键:k从1变为N-1,j从k+1变为N?

根据您的描述,听起来好像您试图访问数组的上三角(应该是什么),因此您可以使用numpy的
triu
()


正如其他人所说,使用字典可能不是最好的选择。

如果键的顺序不重要,您可以这样做

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
关于“我想做的是遍历字典中的所有对象对,并计算它们之间的距离”

您可以使用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之间的距离。

您到底想做什么?做您想做的事情似乎是可行的,但由于字典没有排序,因此非常危险。它不能保证元素的顺序。您似乎没有使用正确的数据结构。如果您要查找可通过其位置访问的有序元素序列,则需要一个列表。您可能要查找
itertools.product
,但您的问题相当模糊。我不选择输入数据的格式,尽管我同意它应该是一个列表。我要做的是遍历字典中的所有对象对,计算它们之间的距离。我认为双循环效率低下的原因是我不想比较两次,因为我有很多,这会浪费计算时间