【问题标题】:Replace Key in Dictonary by another Dictonary and use loops Python3用另一个字典替换字典中的键并使用循环 Python3
【发布时间】:2021-02-21 09:27:00
【问题描述】:

感谢您的帮助。

1。我有输入字典:

populations = {
    'US-AL': 4887871,
    'US-AK': 737438,
    'US-AZ': 7171646}

我还有另一个输入字典 一致性美国国家和俄罗斯主题(这种一致性无关紧要,就像实例一样) 这是“另一个”字典:

usa_rus = {
    'US-AL': 'RU-MOW',
    'US-AK': 'RU-KDA',
    'US-AZ': 'RU-SVE'}

2。我的任务是替换人口字典中的 key。人口 dict 中的新 key 应该是来自 dict usa_rus 的 value。换句话说,我想将 key 中的美国国家替换为俄罗斯主题,value 在 dict 人口中没有改变。

我想要的输出:

populations_new = {
    'RU-MOW': 4887871,
    'RU-KDA': 737438,
    'RU-SVE': 7171646}

3.不幸的是,我对python和创建字典没有深入的了解,我正在学习。 我只使用了一种解决方案,但不清楚:

list = []

for keys,values in populations.items():
    list.append({usa_rus[keys]:values})

输出:

[{'RU-MOW': 4887871}, {'RU-KRS': 737438}, {'RU-SVE': 7171646}]

请帮我制作我想要的输出:)

【问题讨论】:

    标签: python loops dictionary


    【解决方案1】:

    首先,您不应该使用 Python 保留名称作为变量名,因此请重命名您的 list 变量。

    然后,您想使用dict 来获得与您想要的输出相匹配的输出。对您的代码稍作改动:

    new_dict = dict()  # Or new_dict = {}
    for key, value in usa_rus.items():
        new_dict[value] = populations[key]
    

    【讨论】:

    • 谢谢,你说得对,我会重命名变量,谢谢你的解决方案!
    【解决方案2】:
    def convert(populations, usa_rus):
        result = {}
        for key, value in populations.items():
            if key in usa_rus.keys():
                result[usa_rus[key]] = value
            else:
                result[key] = value
        return result
        
    populations = {
        'US-AL': 4887871,
        'US-AK': 737438,
        'US-AZ': 7171646}
    usa_rus = {
        'US-AL': 'RU-MOW',
        'US-AK': 'RU-KDA',
        'US-AZ': 'RU-SVE'}
    
    convert(populations, usa_rus)
    print (populations)
    

    输出:

    {'RU-MOW': 4887871, 'RU-KDA': 737438, 'RU-SVE': 7171646}
    

    【讨论】:

    • 酷,感谢您的解决方案,很棒的功能可能对此类任务有用!
    【解决方案3】:
    for k, v in usa_rus.items():     
        if k in populations:
            populations[v] = populations.pop(k)
    

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
    【解决方案4】:

    如果你颠倒usa_rus字典会更容易:

    >>> rus_usa = {r: u for u, r in usa_rus.items()}
    >>> populations_new = {r: populations[rus_usa[r]] for r in rus_usa.keys()}
    >>> populations_new
    {'RU-MOW': 4887871, 'RU-KDA': 737438, 'RU-SVE': 7171646}
    

    【讨论】:

    • 这在一般情况下是危险的,因为 dict 是一个满射映射。