簡體   English   中英

如何將元組中的所有值添加到字典中?

[英]How can I add all values from a tuple into a dictionary?

假設我有一個三元組列表,我想要一個 function 將它們添加到嵌套字典中,例如兩層深:

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 }}

這將起作用。 不需要導入,並且比理解型語法更具可讀性。

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

編輯

  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}})

最簡單的語法:

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

這是一個字典生成,它為列表中的每個項目輸出a: {c: b} ,按順序將它們解包為a, b, c

這並不能完全滿足您的需求,因為您有想要變成列表的常用鍵。 其他答案可以做到這一點,雖然它們現在和必須是不那么優雅。 我把這個留在這里是為了幫助任何未來的谷歌員工,他們沒有與你完全相同的要求。

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}})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM