Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 循环遍历我的函数中的字典值_Python_Dictionary - Fatal编程技术网

Python 循环遍历我的函数中的字典值

Python 循环遍历我的函数中的字典值,python,dictionary,Python,Dictionary,我有一本字典(称为oxygen\u position\u 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循环遍历字典中的值,并仅对这些值执行距离函数计算(如下) 以下是我的尝试: for x in oxygen_position_dict.values():

我有一本字典(称为oxygen\u position\u 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循环遍历字典中的值,并仅对这些值执行距离函数计算(如下)

以下是我的尝试:

 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))

传递到函数的元组是

(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))

显然(经过一些测试之后),您的代码很好!主要问题是所有值的距离都相同。我试着手动进行计算,结果似乎是这样。因此,要么你真的很幸运得到了这些值,要么distance()工作不正常。

显然(经过一些测试之后),你的代码很正常!主要问题是所有值的距离都相同。我试着手动进行计算,结果似乎是这样。因此,要么你真的很幸运得到了这些值,要么距离()不正常。

检查以下代码:

输入数学

def distance(p0, p1):
    return math.sqrt((p0[0] - p1[0])**2 + (p0[1] - p1[1])**2 + (p0[2] - p1[2])**2)

d =  {'a': (0, 0, 0), 'b': (3.3, 0, 0), 'c': (3.3, 0, 3.3), 'd': (0, 0, 3.3)}
k_1 = (1.65, 8.25, 1.65)

for k,v in d.items():
    print(k,'-',distance(k_1,v))
输出:

a - 8.573651497465942
b - 8.573651497465942
c - 8.573651497465942
d - 8.573651497465942

所有距离值都相同。

检查以下代码:

输入数学

def distance(p0, p1):
    return math.sqrt((p0[0] - p1[0])**2 + (p0[1] - p1[1])**2 + (p0[2] - p1[2])**2)

d =  {'a': (0, 0, 0), 'b': (3.3, 0, 0), 'c': (3.3, 0, 3.3), 'd': (0, 0, 3.3)}
k_1 = (1.65, 8.25, 1.65)

for k,v in d.items():
    print(k,'-',distance(k_1,v))
输出:

a - 8.573651497465942
b - 8.573651497465942
c - 8.573651497465942
d - 8.573651497465942

所有距离值都相同。

代码没有问题。0和1.65之间的距离与3.3和1.65之间的距离相同。所以你得到了4次相同的结果。是的,它可以对应于任何一个,但这里是x2,y2,z2。@91尝试手动计算或稍微改变一下
k_1
,你会看到
distance
做得很好。哇,我怎么没抓住这个。谢谢大家!如果第一个列表中的化学元素是相同的,这是有道理的。你的代码没有问题。0和1.65之间的距离与3.3和1.65之间的距离相同。所以你得到了4次相同的结果。是的,它可以对应于任何一个,但这里是x2,y2,z2。@91尝试手动计算或稍微改变一下
k_1
,你会看到
distance
做得很好。哇,我怎么没抓住这个。谢谢大家!如果第一个列表中的化学元素相同,这是有道理的。