从元组列表创建字典

时间:2020-10-30 13:51:40

标签: python dictionary

例如,我得到了多个元组的列表:

//about:config

我的目标是获得它:

toolkit.legacyUserProfileCustomizations.stylesheets

感谢阅读我

谢谢,它起作用了,但是我必须只有唯一的值,而且我不想有列表

4 个答案:

答案 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)

您可以执行以下操作:

  • 浏览列表中的每个元组,例如(1、2、3)(for t in l
  • 然后检查元组中的第一个元素是否在字典中,即字典是否已经具有该值的键? (if t[0] in s
  • 如果是,则使用元组中除第一个元素外的新元素来更新此值的集合-因为第一个元素是键(s[t[0]].update(set(t[1:]))
  • 不是,然后在字典中使用key =第一个元素和value = set(剩余元素)(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}}