python中列表字典的制作

2024-03-29 13:52:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

for i in range(len(known_embeddings["embeddings"])):
    known_vec = known_embeddings["embeddings"][i]
    vec = vec.reshape(-1, 1)
    distance = cv2.norm(vec, known_vec)
    print("name : {}, distance : {}".format(known_embeddings["names"][i], distance))

在上面的代码中,known_embeddings是list的dict,它包含embeddingsnames作为list。以上代码的输出为:

name : mark, distance : 0.8483050632128444
name : mark, distance : 0.8724386372273983
name : mark, distance : 0.7805887577479304
name : mark, distance : 1.1670809288281123
name : mark, distance : 0.7298390620115697
name : tom, distance : 0.8128083541249622
name : tom, distance : 1.1103164155361172
name : tom, distance : 1.0548001777991225
name : tom, distance : 1.265357138869811
name : tom, distance : 1.2954636861331879

其中每个名称都包含一个距离值。现在我想把上面的结果保存到一个dict of list中,或者可能是两个不同的list,以便以后比较两个名称的每个索引的值。我怎样才能把它保存在目录里。?谢谢


Tags: 代码namein名称fornamesrangedict
2条回答

而不是以

print("name : {}, distance : {}".format(known_embeddings["names"][i], distance))

试试这个:

my_dictionary = {knownembeddings["names"][i] : cv2.norm(vec.reshape(-1, 1), known_embeddings["embeddings"][i]) for i in range(len(known_embeddings["embeddings"]))}

我冒昧简化了你的代码。请试试这个:

from collections import defaultdict

d = defaultdict(list)
vec = vec.reshape(-1, 1)

for name, embedding in zip(known_embeddings["names"], known_embeddings["embeddings"]):
    distance = cv2.norm(vec, embedding)
    d[name].append(distance)

因为同一个键(名称)有多个值(距离),所以我们需要将它们附加到一个列表中,而^{}正是为了实现这一点而派上了用场,因为它可以用一个空列表初始化每个键,这样就可以安全地将值附加到列表中

相关问题 更多 >