我是python編程的大一新生。現在我有一個像 : 這樣的串列“lst” lst = [(1,'a'), (2,'b'), (2,'c'), (3,'d')],我想從 lst 得到一個 dict“d”。“d”應該是{1: ['a'], 2:['b','c'], 3:['d']}。
d = defaultdict(list)
for k,v in lst:
d[k].append(v)
我如何使用理解來實作這一目標?
uj5u.com熱心網友回復:
你的解決方案很好。串列/字典理解并不總是最好的方法。但如果你堅持,你可以這樣做:
from itertools import groupby
lst = [(1, 'a'), (2, 'b'), (2, 'c'), (3, 'd')]
res = {k: [b for a, b in g] for k, g in groupby(lst, key=lambda x: x[0])}
print(res)
輸出:
{1: ['a'], 2: ['b', 'c'], 3: ['d']}
注意:如果您傳遞排序串列,此解決方案將起作用,如果不是,請確保在字典理解中使用它之前對串列進行排序(謝謝@Chepner)
sorted_lst = sorted(lst, key=lambda x: x[0])
uj5u.com熱心網友回復:
你所擁有的已經非常有效,而且不會那么長。它可以轉換為單行,但代價是易讀性,而幾乎沒有或沒有性能優勢:
像這樣:
dic = next(g for g in [{}] if not any(g.setdefault(k,[]).append(v) for k,v in lst))
或這個:
dic = {}; dic.update((k,dic.get(k,[]) [v]) for k,v in lst)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386386.html
