如何有效地循环字典,我是否应该使用其他数据结构

问题描述

我有一个叫dict1。当然,字典是组成的,而真正的字典则更大。

dict1 = {'USA_Mark': ['dog'],'USA_Haechan': ['lion','jaguar'],'USA_Mina': ['apples','pears','watermelons'],'UK_Mark': ['dog'],'UK_Haechan': ['lion','jaguar','tiger'],'UK_Mina': ['apples','watermelons']}

我还有另一个dict2,其中包含以下内容

dict2 = {'USA_cats':['lion','USA_fruits':['apples,'UK_cats':['lion','UK_fruits':['apples,'watermelons']}

最后,我想要将dict2's键映射到dict1's值。

我用硬编码的方式做到了。我所做的是:

for key,value in dict1.items():
    if 'Haechan' in key and len(value ) > 1:
        dict1[key] = dict2['{} cats'.format(key[:2])]
    elif 'Mina' in key and len(value) > 1:
        dict1[key] = dict2['{} fruits'.format(key[:2])]

预期结果:

dict1 = {'USA_Mark': ['dog'],'USA_Haechan': ['USA_cats'],'USA_Mina': ['USA_fruits'],'UK_Haechan': ['UK_cats'],'UK_Mina': ['UK_fruits']}

这不是很有效,我知道,也许我知道更好的方法,我似乎在字典中经常使用循环,并且我从朋友那里听说,如果您始终如一地这样做,您可能需要考虑一个更好的数据结构...

解决方法

将键拆分为_字符,然后使用字典将键的第二部分映射到翻译后的单词。

mapping = {'Haechan': 'cats','Mina': 'fruits'}
for key,value in dict1.items():
    country,type = key.split('_')
    if type in mapping and len(value) > 1:
        dict1[key] = [f'{country}_{mapping[type]}']