Python新手求教:如何将两个字典按对应关系生成目标新字典?
解决字典映射问题的最优方法
嘿,作为Python新手碰到这种不是简单合并、而是按对应关系生成新字典的问题很正常~ 你要的其实是把d1的值转成整数作为键,对应d2的值作为值,刚好两个字典的元素顺序是一一对应的,这里有两种靠谱的实现方式,其中第一种是最Pythonic且高效的:
方法一:利用zip+map的简洁实现
这是最推荐的方式,依赖Python 3.7+字典保留插入顺序的特性(现在大部分环境都满足这个条件),代码简洁高效:
d1 = {'id1' : '1', 'id2' : '2', 'id3' : '3', 'id4' : '4'} d2 = {'fruit1': 'Apple', 'fruit2': 'Banana', 'fruit3': 'Strawberry', 'fruit4': 'Kiwi'} # 核心代码一行搞定 d3 = dict(zip(map(int, d1.values()), d2.values())) print(d3) # 输出结果:{1: 'Apple', 2: 'Banana', 3: 'Strawberry', 4: 'Kiwi'}
原理说明:
d1.values()获取d1的所有值:['1', '2', '3', '4']map(int, d1.values())把这些字符串转成整数迭代器:1,2,3,4d2.values()获取d2的所有水果值:'Apple', 'Banana', 'Strawberry', 'Kiwi'zip()把两个迭代器的元素一一配对,生成类似(1, 'Apple'), (2, 'Banana')这样的元组- 最后用
dict()把这些元组转成字典,就得到你想要的d3了
这个方法的时间复杂度是O(n),完全符合高效的要求,而且代码一眼就能看懂,非常Pythonic。
方法二:基于键命名规则的稳健实现
如果你的Python版本低于3.7(现在很少见了),或者担心字典的插入顺序可能不一致,那就可以通过两个字典键的命名规律(比如id1对应fruit1)来匹配,这种方式更稳健:
d1 = {'id1' : '1', 'id2' : '2', 'id3' : '3', 'id4' : '4'} d2 = {'fruit1': 'Apple', 'fruit2': 'Banana', 'fruit3': 'Strawberry', 'fruit4': 'Kiwi'} d3 = {} for key1, value1 in d1.items(): # 提取id键里的数字部分,比如'id1' -> '1' num = key1.replace('id', '') # 找到对应的fruit键 corresponding_fruit_key = f'fruit{num}' # 把d1的值转成整数当键,d2对应的值当值 d3[int(value1)] = d2[corresponding_fruit_key] print(d3) # 输出结果和上面一致
这种方法不依赖字典顺序,完全靠键的命名规则来匹配,适合更复杂的场景,唯一的缺点就是代码稍微长一点。
内容的提问来源于stack exchange,提问作者user12189022
相关产品推荐
相关产品推荐

