Сортировка словаря python по значению (word2vec)

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

Хотя это довольно некрасиво, вы можете выполнить очистку на отдельном шаге.