Python:如何用dict.get()等方法实现列表值反向取键并生成新字典
实现方法优化(使用dict.get())
思路:先构建反向映射字典
先遍历first_dict,把每个列表元素和对应的键建立反向映射,之后就可以通过dict.get()快速查找,避免重复遍历first_dict,提升效率。
代码实现
first_dict = {'a': ['1', '2', '3'], 'b': ['4', '5'], 'c': ['6'], } second_dict = {'1': 'wqeewe', '2': 'efsafa', '4': 'fsasaf', '6': 'kgoeew', '7': 'fkowew' } # 构建反向映射:元素 -> first_dict对应的键 reverse_map = {item: key for key, value_list in first_dict.items() for item in value_list} # 生成目标字典,用get方法指定默认值None third_dict = {k: reverse_map.get(k, None) for k in second_dict} print(third_dict) # 输出:{'1': 'a', '2': 'a', '4': 'b', '6': 'c', '7': None}
原方法的对比
你之前实现的key_return方法,每次查询都要遍历first_dict,如果second_dict包含大量键,重复遍历会降低效率。而先构建反向映射的方式只需要遍历一次first_dict,后续查询都是O(1)的时间复杂度,更高效。
补充说明
reverse_map.get(k, None)正好满足需求:如果键k存在于反向映射中,返回对应的first_dict的键;不存在则返回None。- 如果
first_dict中存在同一个元素出现在多个列表的情况,反向映射会保留最后一次遍历到的键(因为后面的赋值会覆盖前面的),如果需要处理这种场景,可以把反向映射的值改成列表,存储所有对应的键。
内容的提问来源于stack exchange,提问作者matsuri
相关产品推荐
相关产品推荐

