【问题标题】:How can I add all values from a tuple into a dictionary?如何将元组中的所有值添加到字典中?
【发布时间】:2023-04-07 21:33:01
【问题描述】:

假设我有一个三元组列表,我想要一个函数将它们添加到嵌套字典中,例如两层深:

lst = [('Watermelon', 200, (1,4)), ('Apple', 100, (2, 23)), ('Apple', 120, (1, 33))]

我想返回一个看起来像这样的字典 f:

f = {'Watermelon': {(1,4): 200}, 'Apple': {(2, 23): 100, (1, 33): 120 }}

【问题讨论】:

    标签: python function lambda


    【解决方案1】:

    这会奏效。不需要导入并且比理解型语法更具可读性。

    dictionary = {}
    for a, b, c in lst:
        if a not in dictionary:
            dictionary[a] = {}
        dictionary[a][c] = b
    

    编辑

    1. 同意大卫伯克的观点。理解确实是直观和可读的。不过,它们不应该走得太远。 ;)

    随时进行更正。此答案已排在首位,因此不应具有误导性。

    【讨论】:

    • 不要成为 SO 上众多令人毛骨悚然的书呆子之一,但我发现字典理解语法非常易读和直观......而且更短。我看了一眼 for 循环,认为它可能正在编译数据,也可能正在执行函数。我必须在精神上解析代码才能找到答案。 +1 工作代码,顺便说一句。
    • 代替if a not in dictionary.keys(): 可能更简单的if a not in dictionary:
    【解决方案2】:
    import collections as co
    
    dd = co.defaultdict(dict)
    
    for item in lst: 
        dd[item[0]].update({item[2]:item[1]}) 
    

    结果:

    In [31]: dd
    Out[31]: 
    defaultdict(dict,
                {'Watermelon': {(1, 4): 200},
                 'Apple': {(2, 23): 100, (1, 33): 120}})
    

    【讨论】:

    • 我很难理解为什么 OP 没有将此标记为正确答案。
    • @CONvid19:我相信是因为导入并且可能对默认字典感到不满意。我一开始想太多了,但我喜欢这个答案。
    • 我喜欢并赞成你的回答,因为它是迄今为止最干净的。
    • 好的,谢谢。我看过你对其他问题的回答,也给他们点赞。
    • 抱歉,这是个意外!你的回答很好,谢谢
    【解决方案3】:

    最简单的语法:

    {a: {c: b} for a, b, c in lst}
    

    这是一个字典生成,为列表中的每个项目输出a: {c: b},并将它们按顺序解包为a, b, c

    这并不能完全满足您的需求,因为您有想要变成列表的公共键。其他答案可以做到这一点,虽然它们现在和必须是不那么优雅。我把这个留在这里是为了帮助任何未来的 Google 员工,他们的要求与你的要求不同。

    【讨论】:

    • 不输出 op 想要的:{'Watermelon': {(1,4): 200}, 'Apple': {(2, 23): 100, (1, 33): 120 }},你的答案输出:{'Watermelon': {(1, 4): 200}, 'Apple': {(1, 33): 120}} - trinket.io/python3/5c209fdc20
    【解决方案4】:
    from collections import defaultdict
    
    
    keys = [name for name, *_ in lst]
    vals = [pair for _, *pair in lst]
    
    f = defaultdict(dict)
    
    for key, val in zip(keys, vals):
        f[key].update({val[1]: val[0]})
    

    结果:

    defaultdict(dict,
                {'Watermelon': {(1, 4): 200},
                 'Apple': {(2, 23): 100, (1, 33): 120}})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 2011-07-20
      • 1970-01-01
      相关资源
      最近更新 更多