如何迭代字典中的每对项目

时间:2012-10-27 19:37:17

标签: python arrays dictionary

我正在制作一个重力模拟器,我需要计算作用在每个身体上的合力。

为了做到这一点,我需要遍历字典(id: instance of Body class)中的每对物体,并获得这两个物体之间的引力。然后,我会把所有的力量加起来并得到结果。

但是,如何在Python中只迭代一次字典中的每对项目?如果将天体保存在列表中,那将很简单:

for i in range(len(bodies)):
    for j in range(len(bodies) - i - 1):
        k = j - i + 1
        b1 = bodies[i]
        b2 = bodies[k]

3 个答案:

答案 0 :(得分:2)

values()itertools' combinations是此用例的理想选择。

from itertools import combinations
for a, b in combinations(bodies.values(), 2):
    print a, b

答案 1 :(得分:1)

您正在寻找itertools.combinations()

一个例子:

In [76]: lis=['a','b','c','d']  #consider these as your dictionary items

In [77]: [x for x in combinations(lis,2)]
Out[77]: [('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]

答案 2 :(得分:1)

itertools模块提供了一种非常出色的combinations方法:

from itertools import combinations

bodies = {}
# add bodies

for a,b in combinations(bodies.values(), 2):
    # a and b are a pair of bodies. do stuff
    pass

顺便说一句,即使您使用列表,这仍然有效:

from itertools import combinations

bodies = []
# add bodies

for a,b in combinations(bodies, 2):
    pass