交叉两个字典并获得平均分数

Intersecting two Dictionaries and getting average scores

我有2本python本词典,每本词典都有一个城市名称和该城市的分数。 我需要比较两个词典以找到最大 score.Hence 的城市,为此我首先取两个词典的交集以获得共同点 cities.This 是我面临的问题。 例如,假设两个词典是:

d1 = {"delhi": 40, "Jaipur": 50, "Gurgaon": 10}
d2 = {"Jaipur(Rajasthan)": 30, "Gurugram(Gurgaon)": 25}

此处由于括号或城市有一些额外的字符串,交集失败。

所以我的问题是,如果一个城市部分出现在字符串中,是否有任何方法将其带入交叉路口?

还有,最后我要给这个城市一个平均分

我希望最终结果是:

d3 = {"gurgaon": 17.5((10 + 25) / 2), "jaipur": 40(80 / 2)}

我该如何实现?

如果你只需要比较两个字典,你可以使用过滤函数做这样的事情:

def get_avg_scores(d1, d2):
    d3 = {}
    for key, item in d1.items():
        # Get match key d1 vs. d2
        d2_similar_key = list(filter(lambda x: key.lower() in x.lower(), d2.keys()))

        #Get match key d2 vs. d1
        d2_similar_key_rev = list(filter(lambda x: x.lower() in key.lower(), d2.keys()))

        # Keep the simplest key (to avoid bracets in d3)
        if len(d2_similar_key) > 0:
            d3[key] = (item + d2[d2_similar_key[0]])/2
        if len(d2_similar_key_rev) > 0:
            d3[d2_similar_key_rev[0]] = (item + d2[d2_similar_key_rev[0]])/2


    return d3

d3 = get_avg_scores(d1, d2)

您可以创建规范化的字典,其中用于匹配的键是从原始键中提取的。由于输入字典的键中括号内和括号外的名称都可以用于匹配,因此在规范化字典中为两个名称创建冗余键:

import re

n1, n2 = (
    {t.lower(): v for k, v in d.items() for t in re.findall('[^()]+', k)} 
    for d in (d1, d2)
)
print({k: (n1[k] + n2[k]) / 2 for k in n1.keys() & n2.keys()})

这输出:

{'gurgaon': 17.5, 'jaipur': 40.0}