首页 > 解决方案 > 如何有效地循环字典,我应该使用另一种数据结构

问题描述

我有一个叫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', 'pears', 'watermelons']}

我有另一个 dict2 包含这样的内容:

dict2 = {'USA_cats':['lion', 'jaguar'], 'USA_fruits':['apples, 'pears', 'watermelons'],
         'UK_cats':['lion', 'jaguar', 'tiger'], 'UK_fruits':['apples, 'pears', '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_Mark': ['dog'],
         'UK_Haechan': ['UK_cats'],
         'UK_Mina': ['UK_fruits']}

这效率不高,我知道,请问我可以知道更好的方法吗,我似乎经常在字典中使用循环,我从朋友那里听说如果你一直这样做,你可能需要考虑一个更好的方法数据结构...

标签: pythondictionarydata-structures

解决方案


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

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]}']

推荐阅读