簡體   English   中英

如何將大小為3的元組的列表制成鍵值對?

[英]How would I make a list of tuples of size three into key-value pairs?

目的:
第一個數字:第二個數字的鍵
第二個數字:值是第一個數字,但鍵是第三個數字
第三個數字:第二個數字的值

def make_dictionary_list(old_list):
    return {key: values for key, *values in old_list}

輸入:
[(4157, 1, 1), (4157, 1, 10), (4157, 2, 1), (4157, 2, 10), (4157, 3, 1), (4157, 3, 10), (4157, 4, 1), (4157, 4, 10), (4182, 1, 1)]

輸出:
{4157: [4, 10], 4182: [1, 1]}

輸出不是我想要的。 如上所述,我希望第一個數字是第二個數字的鍵,而第二個數字是第三個數字的鍵。 我將如何去做?

謝謝!

您可以解開列表,然后使用dict.setdefault()將其放入字典中:

data = [(4157, 1, 1), (4157, 1, 10), (4157, 2, 1), (4157, 2, 10), (4157, 3, 1), 
        (4157, 3, 10), (4157, 4, 1), (4157, 4, 10), (4182, 1, 1)]

d = {}
for k,v,p in data:
    key = d.setdefault(k,{})
    key[v]=p

print(d)

輸出:

{4157: {1: 10, 2: 10, 3: 10, 4: 10}, 4182: {1: 1}}

您可以通過以下方式訪問它:

print( d[4157][3] ) # 10

結果比源數據短,因為您將第一個值替換為第二個值:

(4157, 1, 1) => (4157, 1, 10)  # 10 replaces 1  
(4157, 2, 1) => (4157, 2, 10)  # etc.
(4157, 3, 1) => (4157, 3, 10)
(4157, 4, 1) => (4157, 4, 10) 

您可以這樣匯總它們:

for k,v,p in data:
    key = d.setdefault(k,{})
    key2 = key.setdefault(v,[])
    key2.append(p)

print(d)

獲得以下內容的輸出:

{4157: {1: [1, 10], 2: [1, 10], 3: [1, 10], 4: [1, 10]}, 4182: {1: [1]}}

並通過訪問

print( d[4157][3] ) # [1, 10]

暫無
暫無

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

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