Python - 从嵌套字典理解中填充字典

时间:2016-07-21 21:15:39

标签: python python-3.x dictionary dictionary-comprehension

我希望通过迭代其他两个词典来填充字典。我有一个工作示例,我想知道是否有一种方法可以在字典理解中(主要是出于性能原因)或使其更加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的新手,所以我很确定这不是实现这个的pythonic方式。我通过使用理解而不是for循环看到了性能上的重大改进,所以我很好奇这个代码是否也可以使用嵌套字典理解来完成,如果这样做有意义的话。

如果使用理解这样做不是一个好主意,我可以做任何改进吗?

1 个答案:

答案 0 :(得分:0)

这是一个足够复杂的替换模式,如果你要将它全部包含在一个单行中,那么它将非常难以阅读。保持与使流动可理解相关的结构和间距是解决这个问题的更加琐碎的方法。

至于性能提升,您可能无法看到this问题中讨论的内容。