![](/img/trans.png)
[英]Remove tuples within a list of tuples based on dictionary value within the tuple
[英]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.