【问题标题】:Replace dictionary key with reference to another dictionary which acts as glossary for the key将字典键替换为另一个字典,该字典充当该键的词汇表
【发布时间】:2020-05-19 16:07:11
【问题描述】:

我有一个 python 字典,它是某种词汇表。

glossary_dict = {'AA': 'AA_meaning',
                 'BB': 'BB_meaning',
                 'CC': 'CC_meaning',
                 }

这是原始字典。

original = [{'AA': '299021.000000'},
            {'BB': '299021.000000'},
            {'CC': '131993.000000'},
            ]

我想用glossary_dict的对应值替换original字典的键。 最终的结果会是这样的;

explained = {'AA_meaning': '299021.000000',
             'BB_meaning': '299021.000000',
             'CC_meaning': '131993.000000',
            } 

我正在使用 python 3.7

【问题讨论】:

  • 你尝试过什么,到底有什么问题?
  • 您不能“替换”字典中的键 - 您可以添加替换键并删除原始键,或者您可以根据自己的喜好创建一个新的字典。最简单的方法是循环,更难的是 dict comp。如果研究不能帮助您自己解决问题,请尝试两种方法并发布您挂断的位置。
  • @jonrsharpe,我想我已经找到了答案。等一下。
  • @jonrsharpe 不。我将把答案放在这里以供将来参考。谁知道?可能对其他人有用。这就是堆栈溢出的目的。
  • 这对我来说不是小事。你不能假设别人和你一样聪明。

标签: python python-3.x dictionary


【解决方案1】:

或者如果我们想要更多不可读:

{glossary_dict.get(*o.keys()): o.get(*o.keys()) for o in original}

好东西也是因为它使用*解包。

【讨论】:

    【解决方案2】:

    这是我自己问题的答案。

    new_dict = {}
    for index in range(len(original)):
        for key in original[index]:
            new_dict[glossary_dict[key]] = original[index][key]
    
    print(new_dict)
    

    另一种更优雅的方法是使用字典理解。答案由 Rakesh[https://stackoverflow.com/a/61906060/3848207].我把它放在这里方便参考。

    explained = {glossary_dict[key]: value for i in original for key, value in i.items()}
    print(explained)
    

    【讨论】:

    • 这取决于字典顺序(因此可能会给出错误的结果),为什么不遍历 list?那样的话,它可能是一个单行列表理解。
    • 列表理解易读难写,至少对我而言。
    • 你没有使用列表理解,我想,但无论哪种方式迭代original而不是glossary_dict都会更简单,更不容易错误。增加索引也很少是循环的惯用方式。
    • @jonrsharpe,我完全改变了答案。感谢您指出先前的答案取决于字典顺序。新答案应该会更好。
    • 列表中只有一本字典,这不是您的问题所需的输出...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2016-04-14
    • 2021-07-13
    • 2014-01-13
    相关资源
    最近更新 更多