Skip to main content
 首页 » 编程设计

python之在我的函数中循环遍历字典值

2025年05月04日20sxdcgaq8080

我有一个字典(称为 oxygen_position_dict),包含以下内容:

 {'a': (0, 0, 0), 'b': (3.3, 0, 0), 'c': (3.3, 0, 3.3), 'd': (0, 0, 3.3)} 

我还有一个固定的元组,我称之为 k_1

 k_1 = (1.65, 8.25, 1.65) 

我正在尝试让 for 循环遍历我字典中的值,并仅对这些值执行距离函数计算(如下)

 def distance(x1, y1, z1, x2, y2, z2): 
     return sqrt(((x1 - x2)**2 + (y1 - y2)**2 + (z1 - z2)**2)) 

下面是我的尝试:

 for x in oxygen_position_dict.values(): 
      print(distance(*(x + k_1))) 

但是,输出是

 8.573651497465942 
 8.573651497465942 
 8.573651497465942 
 8.573651497465942 

这只是第一个字典值的距离计算的输出!

如何让它遍历我的整个值集,同时保持 k_1 不变?感谢您的帮助!

请您参考如下方法:

传递给你函数的元组是

(0, 0, 0, 1.65, 8.25, 1.65) 
(3.3, 0, 0, 1.65, 8.25, 1.65) 
(3.3, 0, 3.3, 1.65, 8.25, 1.65) 
(0, 0, 3.3, 1.65, 8.25, 1.65) 

这给出了你的向量的差异

(-1.65, -8.25, -1.65) 
(1.65, -8.25, -1.65) 
(1.65, -8.25, 1.65) 
(-1.65, -8.25, 1.65) 

现在将它们的平方相加会得到相同的结果。


使用 scipy 你可以免费得到距离:

from scipy.spatial import distance 
 
for x in oxygen_position_dict.values(): 
    print(distance.euclidean(k_1, x)) 

numpy 也可以让事情变得更简单:

import numpy as np 
 
oxygen_position_dict = {'a': np.array((0, 0, 0)),  
                        'b': np.array((3.3, 0, 0)), 
                        'c': np.array((3.3, 0, 3.3)), 
                        'd': np.array((0, 0, 3.3))} 
 
k_1 = np.array((1.65, 8.25, 1.65)) 
 
for x in oxygen_position_dict.values(): 
    print(np.linalg.norm(k_1 - x))