【问题标题】:Python Dictionary: How to update dictionary value, base on key - using separate dictionary keysPython Dictionary:如何根据键更新字典值 - 使用单独的字典键
【发布时间】:2018-03-05 10:24:11
【问题描述】:

我有两个长度不等的字典,例如:

people = {"john" : "carpenter", "jill": "locksmith", "bob":"carpenter", "jane": "pilot", "dan": "locksmith"}

jobcode = {"carpenter": 1, "locksmith": 2, "pilot": 3}

我想要做的是将people 中的值替换为jobcode 值。 所以你最终会得到: n

people = {"john": 1, "jill": 2, "bob": 1, "jane": 3, "dan":2} 

我很乐意创建另一个新的 dict 来封装这些新数据,但到目前为止,我认为最接近的是 this...我想...

任何帮助将不胜感激。

【问题讨论】:

    标签: python python-3.x dictionary replace updates


    【解决方案1】:

    你可以通过dict理解轻松实现这一点

    {k: jobcode[v] for k, v in people.items()}
    

    但是你应该小心,因为它可以引发KeyError

    默认jobcodedict .get() method 的另一种方式:

    default_jobcode = 1000
    final_dict = {k: jobcode.get(v, default_jobcode) for k, v in people.items()}
    

    更新

    正如@Graipher 请注意的那样,如果jobcode dict 缺少键值对,您可以保持项目不变:

    final_dict = {k: jobcode.get(v, v) for k, v in people.items()}
    

    这可能是默认 jobcode 更好的解决方案。

    【讨论】:

    • 您也可以使用jobcode.get(v, v) 保留不在jobcode 中的键。
    • @Graipher 可能是这种情况,但它会破坏str: int dict 约定(如果存在)。但是谢谢你,我更新了我的答案!
    • 是的。另一方面,如果需要,它允许使用来自多个来源的作业代码进行多次传递。很高兴了解这两种方法,在不同的情况下可能需要其中一种。
    • 非常感谢!这正是正在发生的事情。因为我没有使用 .get(v, v) 我遇到了一个关键错误!所有的代码对我来说似乎都有意义!我希望这对处于相同情况的其他人有所帮助!
    【解决方案2】:

    键入:-

    people = {'john' : 'carpenter', 'jill': 'locksmith', 'bob':'carpenter', 'jane': 'pilot', 'dan': 'locksmith'}
    jobcode = {'carpenter': 1, 'locksmith': 2, 'pilot': 3}
    for i,j in people.items():
        if j in jobcode.keys():
            people[i] = jobcode[j]
    print(people)
    

    【讨论】:

      猜你喜欢
      • 2021-02-19
      • 1970-01-01
      • 2015-11-03
      • 2019-06-26
      • 2021-09-04
      • 1970-01-01
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多