简体   繁体   English

如果嵌套的字典键名与另一个字典键名匹配,则重命名

[英]Rename nested dictionary key name if it matches another dictionary key name

Say I have a nested dictionary 说我有一本嵌套的字典

dict1 = {'London': {'car_toyota': 288, 'car_audi': 64, 'car_bmw': 426}, 'Paris': {'car_toyota': 48, 'car_audi': 96}, 'New York': {'car_bmw': 48}

And have normal dictionary 并有普通字典

dict2 = {'car_toyota': 'Toyota', 'car_audi': 'Audi', 'car_bmw': 'BMW'}

I want to rename the keys in dict1 with the value of the corresponding key in dict2, so it would look like 我想用dict2中相应键的值重命名dict1中的键,所以看起来像

{'London': {'Toyota': 288, 'Audi': 64, 'BMW': 426}, 'Paris': {'Toyota': 48, 'Audi': 96}, 'New York': {'BMW': 48}

I'm getting stuck in messy nested loops that don't seem to give what I want 我陷入混乱的嵌套循环中,似乎无法提供我想要的东西

for i, j in dict1.iteritems():
    for k, v in j.items():
        for a, b in dict2.items():
            if k == a:
                j[k] == j.pop(a)

What would be the best way to do this? 最好的方法是什么?

You can use nested dictionary comprehension: 您可以使用嵌套字典理解:

dict1 = {'London': {'car_toyota': 288, 'car_audi': 64, 'car_bmw': 426}, 'Paris': {'car_toyota': 48, 'car_audi': 96}, 'New York': {'car_bmw': 48}}
dict2 = {'car_toyota': 'Toyota', 'car_audi': 'Audi', 'car_bmw': 'BMW'}
final_d = {a:{dict2[c]:d for c, d in b.items()} for a, b in dict1.items()}

Output: 输出:

{'Paris': {'Toyota': 48, 'Audi': 96}, 'New York': {'BMW': 48}, 'London': {'Toyota': 288, 'BMW': 426, 'Audi': 64}}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM