如何将元组中的所有值添加到字典中?

问题描述 投票:0回答:4

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

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
4个回答
3
投票

这将起作用。不需要导入并且比理解类型的语法更具可读性。

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

编辑

  1. 同意DavidBurke。理解确实是直观且可读的。但是,它们不应走得太远。 ;)

  2. 致MarianD:我不确定in dictin dict.keys()哪个更好。

随时进行更正。这个答案已经到了最重要的位置,因此不要误导。


1
投票
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}})

1
投票

最简单的语法:

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

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

这并不能完全满足您的需要,因为您有想要转换为列表的公用密钥。其他答案可以做到,尽管现在和现在都不够优雅。我将其留在这里以帮助任何未来的Googler,他们对您的要求都不尽相同。


0
投票
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}})
© www.soinside.com 2019 - 2024. All rights reserved.