他の2つの辞書を反復して辞書に入れたいと思う。私は実際の例を持っており、(主にパフォーマンス上の理由から)辞書理解でそれを行う方法があるかどうかを知りたいのですか、それとももっとpythonicにするかを知りたいと思います。まずはコードはPython - ネストされた辞書の理解から辞書を取り込む
def get_replacement_map(dict_A, dict_B, min_sim):
replacement_map = {} # the dictionary i want to populate
for key_A, value_A in dict_A.items():
best_replacement =()
best_similarity = 0
for key_B, value_B in dict_B.items():
if key_B[0] != key_A[0]:
# similarity(x,y) may return None so in that case assign sim = 0
sim = similarity(value_A[0], value_B[0]) or 0
if sim > best_similarity and sim > min_sim:
best_replacement = key_B
best_similarity = sim
if sim > 0.9: # no need to keep looking, this is good enough!
break
if best_replacement:
synonym_map[key_A] = best_replacement
return replacement_map
です。これは、2つの辞書の要素間の類似性を計算し、各要素について、可能な限り最良の置換を見つける(類似性がmin_sim閾値を超える場合)。その目的は、置換の辞書を構築することです。
私はPythonには新しいので、これはこれを実装するためのpythonの方法ではないと確信しています。私はループの代わりに補間を使用することでパフォーマンスが大幅に向上したことが分かりました。このコードをネストされた辞書内包表記を使用して実行できるかどうか、またそれが意味があるのかどうか不思議でした。
私ができる改善点はありますか?
あなたが 'dict.items()'を使用していることを言及しておきましょう。 Python3では、Python2よりもはるかに優れていますが(http://stackoverflow.com/questions/12543837/python-iterating-over-list-vs-over-dict-items-efficiency)、価値があるかもしれません代わりに 'for key in dict'を使用してdictキーを反復し、' dict [key] 'で値を呼び出すことでパフォーマンスの向上を確認してください。 –
@RNarありがとう、私はそれを試みます。 –