按值对字典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]))

解决方法

您正在尝试对集合进行排序,而 Python 不确定如何对它们进行排序。把你的分数从集合里拿出来,然后你就可以按预期排序了。

dict(sorted(hashmap.items(),key=lambda x: tuple(x[1])[0]))

虽然这很丑陋,但您可能希望在单独的步骤中进行清理。