【发布时间】:2016-11-25 15:38:01
【问题描述】:
我想通过遍历其他两个字典来填充字典。我有一个工作示例,我想知道是否有一种方法可以在字典理解中做到这一点(主要是出于性能原因)或使其更加 Pythonic。首先是代码:
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 新手,所以我很确定这不是 Python 的实现方式。通过使用推导而不是 for 循环,我已经看到性能有了很大的改进,所以我很好奇这段代码是否也可以使用嵌套字典推导来完成,以及这样做是否有意义。
如果使用推导不是一个好主意,我可以做些什么改进?
【问题讨论】:
-
有一点需要提一下(这与其说是一个直接的答案,不如说是一个注释)是您对
dict.items()的使用。尽管在 python3 中绝对比 it was in python 2 好得多,但通过迭代字典键而不是for key in dict,然后使用dict[key]调用值,可能值得看到性能改进。 -
@RNar 谢谢,我会试试的。
标签: python python-3.x dictionary dictionary-comprehension