按值(word2vec)对python字典排序



我想按值排序我的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]))

这是相当丑陋的,你可能想在一个单独的步骤做清理。

最新更新