簡體   English   中英

根據元組值將元組列表轉換為字典

[英]Convert a list of tuples to a dictionary, based on tuple values

我有一個小問題,也許很愚蠢,但似乎我無法解決。

我有一個包含成員的對象列表,但假設我的列表是這樣的:

l = [(1, 'a'), (2, 'a'), (1, 'b'), (1, 'c'), (3, 'a')]

我想根據我選擇的值“收集”所有元素,並根據該值/鍵(可以是元組的第一個或第二個值)將它們放入字典中。

例如,如果我想根據第一個元素收集值,我想要這樣的東西:

{1: [(1, 'a'), (1, 'b'), (1, 'c')], 2: [(2, 'a')], 3: [(3, 'a')]}

但是,到目前為止,我取得的成就是:

>>> {k:v for k,v in zip([e[0] for e in l], l)}
{1: (1, 'c'), 2: (2, 'a'), 3: (3, 'a')}

有人可以幫我嗎?

我的第一個想法是使用defaultdict(list) (高效,線性時間),這正是你想要做的:

from collections import defaultdict
dic = defaultdict(list)
l = [(1, 'a'), (2, 'a'), (1, 'b'), (1, 'c'), (3, 'a')]
for item in l:
    dic[item[0]].append(item)

output

defaultdict(list,{1: [(1, 'a'), (1, 'b'), (1, 'c')], 2: [(2, 'a')], 3: [(3, 'a')]})

這里有列表理解,oneliner:

l = [(1, 'a'), (2, 'a'), (1, 'b'), (1, 'c'), (3, 'a')]

print (dict([(x[0], [y for y in l if y[0] == x[0]]) for x in l]))

Output:

{1: [(1, 'a'), (1, 'b'), (1, 'c')], 2: [(2, 'a')], 3: [(3, 'a')]}

這里是 go:

l = [(1, 'a'), (2, 'a'), (1, 'b'), (1, 'c'), (3, 'a')]
output_dict = dict()

for item in l:
    if item[0] in output_dict:
        output_dict[item[0]].append(item)
        continue
    output_dict[item[0]] = [item]

print(output_dict)

首先創建一個帶有列表的dico:

l = [(1, 'a'), (2, 'a'), (1, 'b'), (1, 'c'), (3, 'a')]
dico={}
for i in range(4):
    dico[i]=[]

然后填充這個dico

for i in l:
    dico[i[0]].append(i)

暫無
暫無

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

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