检查字典键之间的部分匹配Python 2.7

时间:2018-09-19 18:15:06

标签: python python-2.7 dictionary

我有两个字典:

D1 = {'1A11':'cat'}
D2 = {'1A2':'collar', 'B2':'dog'}

我想循环D1字典并返回与D1键的第一部分匹配的字典D2中的键,值。

例如('1A2A':'collar'),因为1A111A2的前半部分匹配,而与末尾的数字无关。

非常感谢您

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

D1 = {'1A11':'cat'}
D2 = {'1A2':'collar', 'B2':'dog'}

def find_partial_matches(first, second, min_count):
    # You need to store the results in a list at least
    matches = []

    # Go through all keys of first dictionary
    for first_key in first:
        # Go through all pairs of second dictionary
        for second_key, second_value in second.items():
            # Check whether the min_count first characters are equal
            if first_key[0:min_count] == second_key[0:min_count]:
                matches.append((second_key, second_value))

    return matches

# In any cases, you will have to provide a minimum number of
# characters to match
print find_partial_matches(D1, D2, 2)

这将输出:

[('1A2', 'collar')]

快速说明

我基本上有蛮力的方法。我遍历第一本词典的所有键。对于每个键,我遍历第二个字典的每对(key, value)。我检查两个键的min_count首个字符是否相等(使用[0:min_count]完成,这意味着从索引0开始并用于min_count个字符),如果是这样,匹配项,我将其添加到匹配项列表中。最后返回列表。

您可能会做得更好。例如,上述实现不处理重复项(但我确定您可以处理)。