例如,我得到了多个元组的列表:
//about:config
我的目标是获得它:
toolkit.legacyUserProfileCustomizations.stylesheets
感谢阅读我
谢谢,它起作用了,但是我必须只有唯一的值,而且我不想有列表
答案 0 :(得分:3)
您可以使用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}}
答案 1 :(得分:2)
您可以执行以下操作:
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
进行一些操作
答案 2 :(得分:0)
例如:
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)
答案 3 :(得分:0)
这是使用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}}