#python #sorting #word2vec #cosine-similarity
#python #сортировка #word2vec #косинусное подобие
Вопрос:
Я хочу отсортировать свой dict
по значению, но если я применяю этот код, он не работает (он печатает только мои key-value
пары без какой-либо сортировки). Если я изменю key=lambda x: x[1] to x[0]
его правильно, отсортируйте по key
, поэтому я не понимаю, что я делаю не так.
Мой код:
from gensim.models.word2vec import Word2Vec
from scipy.spatial.distance import cosine
e_science = Word2Vec.load("clean_corpus_science.model")
e_pokemon = Word2Vec.load("clean_corpus_pokemon.model")
science_vocab = list(e_science.wv.vocab)
pokemon_vocab = list(e_pokemon.wv.vocab)
vocab_intersection = list(set(science_vocab).intersection(set(pokemon_vocab)))
similarity = []
for i in range(0, len(vocab_intersection)):
similarity.append(1-cosine(e_science[vocab_intersection[i]], e_pokemon[vocab_intersection[i]]))
hashmap = {}
for i in range(0, len(similarity)):
hashmap[vocab_intersection[i]] = {similarity[i]}
dict(sorted(hashmap.items(), key=lambda x: x[1]))
Комментарии:
1. В какой версии python вы работаете? В старых словарях неупорядоченные
2. 3.6.9, я использую блокнот colab
3. сортировка с
lambda x: x[0]
сортировкой по ключу, с использованиемlambda x: x[1]
сортировки по значению4. Я уже пробовал, но x[1] не работает (вместо x[0] правильная сортировка по ключу)
5. не могли бы вы поделиться одним из значений в вашей хэш-карте?
Ответ №1:
Вы пытаетесь отсортировать наборы, а Python не уверен, как их упорядочить. Извлеките свои оценки из наборов, а затем вы можете сортировать, как ожидалось.
dict(sorted(hashmap.items(), key=lambda x: tuple(x[1])[0]))
Хотя это довольно некрасиво, вы можете выполнить очистку на отдельном шаге.