Как сделать словарь списка в Python - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть код ниже:

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 является списком, который содержит embeddings и names в качестве списка.Вывод приведенного выше кода:

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

, где каждое имя содержит значение расстояния.Теперь я хочу сохранить приведенный выше результат в виде списка или, возможно, двух разных списков, чтобы позже я мог сравнить значения каждого индекса обоих имен.Как я могу сохранить его в списках?Спасибо

Ответы [ 2 ]

2 голосов
/ 28 сентября 2019

Я позволил себе немного упростить ваш код.Пожалуйста, попробуйте это:

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)

Поскольку у вас есть несколько значений (расстояний) для одного и того же ключа (имени), нам нужно добавить их в список, и defaultdict приходитэто удобно для инициализации каждого ключа пустым списком, чтобы к нему можно было добавлять значения ..

1 голос
/ 28 сентября 2019

Вместо цикла, который заканчивается

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"]))}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...