我有两个字典:
D1 = {'1A11':'cat'}
D2 = {'1A2':'collar', 'B2':'dog'}
我想循环D1字典并返回与D1键的第一部分匹配的字典D2中的键,值。
例如('1A2A':'collar')
,因为1A11
和1A2
的前半部分匹配,而与末尾的数字无关。
非常感谢您
答案 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
个字符),如果是这样,匹配项,我将其添加到匹配项列表中。最后返回列表。
您可能会做得更好。例如,上述实现不处理重复项(但我确定您可以处理)。