Я хочу заполнить словарь, итерации по двум другим словарям. У меня есть рабочий пример, и я хотел бы знать, есть ли способ сделать это в понимании словаря (главным образом по причинам производительности) или сделать его более питоническим. Прежде всего, это код: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
Это простая вещь. Он вычисляет сходство между элементами двух словарей и для каждого элемента находит наилучшую возможную замену (если сходство выше порога min_sim). Цель состоит в том, чтобы создать словарь замещений.
Я новичок в Python, поэтому я уверен, что это не пифонический способ реализовать это. Я видел большие улучшения в производительности с использованием понятий, а не для циклов, поэтому мне было любопытно, может ли этот код также выполняться с использованием вложенных словесных понятий, а также если это имеет смысл делать.
Если это нехорошая идея сделать это с помощью понятий, есть ли улучшения, которые я могу сделать?
Следует упомянуть (и это скорее примечание, чем прямой ответ) - это использование 'dict.items()'. Хотя определенно намного лучше в python3, чем [он был в python 2] (http://stackoverflow.com/questions/12543837/python-iterating-over-list-vs-over-dict-items-efficiency), может быть полезно чтобы увидеть улучшение производительности путем итерации через ключи dict вместо «для ключа в dict», а затем вызывать значения с помощью 'dict [key]'. –
@RNar спасибо, я попробую это. –