[英]Create a dictionary from a list of tuples
我得到了一個像這樣的多個元組的列表,例如:
[(1,2,3),(1,10,11),(5,7,8)]
我的目標是獲得它:
{1:{2,3,10,11},5:{7,8}}
謝謝你讀我
謝謝,它有效,但我必須只有唯一的價值,而且我不想有列表
您可以使用defaultdict
:
l = [(1,2,3),(1,10,11),(5,7,8)]
from collections import defaultdict
d = defaultdict(set)
for k,*t in l:
d[k].update(t)
或者使用 python dict
我們可以使用dict.setdefault
:
d = dict()
for k,*t in l:
d.setdefault(k, set()).update(t)
print(d)
{1: {10, 11, 2, 3}, 5: {8, 7}}
您可以執行以下操作:
for t in l
)if t[0] in s
)s[t[0]].update(set(t[1:]))
)s[t[0]] = set(t[1:])
) l = [(1,2,3),(1,10,11),(5,7,8)]
s = {}
for t in l:
if t[0] in s:
s[t[0]].update(set(t[1:]))
else:
s[t[0]] = set(t[1:])
print(s)
輸出:
{1: {10, 11, 2, 3}, 5: {8, 7}}
如果您希望對字典中每個項目的集合(值)進行排序,您可以使用ordered-set
或對OrderedDict
一些操作
例如:
tuples=[(1,2,3),(1,4,5),(2,4,7)]
keys=set([i[0] for i in tuples])
result={}
for key in keys:
dummy=[]
for t in tuples:
if t[0]==key:
dummy.append(t[1:])
result[key]=dummy
編輯:減少循環
result={}
for k, *t in tuples:
if k not in result:
result[k] = t
else:
result[k].extend(t)
這是使用pandas
的單行解決方案:
import pandas as pd
lst = [(1, 2, 3), (1, 10, 11), (5, 7, 8)]
result = (pd.DataFrame(lst).groupby(0).agg(set)
.apply(lambda x: x[1].union(x[2]), axis=1).to_dict())
基本上,首先您將所有具有相同第一個元素的元組分組。 然后用元組的剩余元素構建集合。 您在共享第一個元素的集合上使用union
操作。 最后,您從生成的數據幀構建字典。
結果如下:
>>> result
{1: {11, 3, 2, 10}, 5: {8, 7}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.