Python 从元组列表创建字典

Python 从元组列表创建字典,python,dictionary,Python,Dictionary,我得到了一个多元组列表,例如: [(1,2,3),(1,10,11),(5,7,8)] 我的目标是获得它: {1:{2,3,10,11},5:{7,8}} 谢谢你读我的书 谢谢,它可以工作,但我必须只有唯一的值,而且我不想有列表您可以使用: 或者使用pythondict我们可以使用dict.setdefault: d = dict() for k,*t in l: d.setdefault(k, set()).update(t) 您可以使用: 或者使用pythondict我们

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


[(1,2,3),(1,10,11),(5,7,8)]

我的目标是获得它:

{1:{2,3,10,11},5:{7,8}}
谢谢你读我的书

谢谢,它可以工作,但我必须只有唯一的值,而且我不想有列表

您可以使用:

或者使用python
dict
我们可以使用
dict.setdefault

d = dict()
for k,*t in l:
    d.setdefault(k, set()).update(t)

您可以使用:

或者使用python
dict
我们可以使用
dict.setdefault

d = dict()
for k,*t in l:
    d.setdefault(k, set()).update(t)

例如:

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)
例如:

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)

您可以执行以下操作:

  • 检查列表中的每个元组,例如(1、2、3)(
    表示l中的t
  • 然后检查元组中的第一个元素是否在字典中,即字典中已经有一个具有该值的键?(
    如果s中的t[0]
  • 如果是,则使用元组中的新元素(不包括第一个元素)更新值集,因为第一个元素是键(
    s[t[0])。更新(set(t[1:])
  • 如果没有,则在字典中创建一个项,key=first元素,value=set(剩余元素)(
    s[t[0]]=set(t[1:])
输出:

{1: {10, 11, 2, 3}, 5: {8, 7}}

如果您希望对字典中每个项目中的集合(值)进行排序,可以对

执行以下操作:

  • 检查列表中的每个元组,例如(1、2、3)(
    表示l中的t
  • 然后检查元组中的第一个元素是否在字典中,即字典中已经有一个具有该值的键?(
    如果s中的t[0]
  • 如果是,则使用元组中的新元素(不包括第一个元素)更新值集,因为第一个元素是键(
    s[t[0])。更新(set(t[1:])
  • 如果没有,则在字典中创建一个项,key=first元素,value=set(剩余元素)(
    s[t[0]]=set(t[1:])
输出:

{1: {10, 11, 2, 3}, 5: {8, 7}}

如果您希望对字典中每个项目中的集合(值)进行排序,可以对

使用一个或一些操作

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())
基本上,首先将具有相同第一个元素的所有元组分组。然后用元组的其余元素构建集合。对共享第一个元素的集合使用
联合
操作。最后,根据生成的数据帧构建字典

结果如下:

>>> result
{1: {11, 3, 2, 10}, 5: {8, 7}}

下面是一个使用
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())
基本上,首先将具有相同第一个元素的所有元组分组。然后用元组的其余元素构建集合。对共享第一个元素的集合使用
联合
操作。最后,根据生成的数据帧构建字典

结果如下:

>>> result
{1: {11, 3, 2, 10}, 5: {8, 7}}

你能解释一下你到底想达到什么目的吗。要将元组的确切列表转换为字典,或者是否有一种模式您正试图遵循?您能否解释一下您正试图实现的目标。要将元组的确切列表转换为该字典,或者是否有您试图遵循的模式?提示:要从defaultDict获取正常的dict,请使用
dict(d)
OP需要一个集合作为字典中的值。已更新。感谢您编辑@RiccardoBucco,也许您可以同时更新这两个版本;)提示:要从defaultDict获取正常的dict,请使用
dict(d)
OP需要一个集合作为dictionary.Updated中的值。感谢您编辑@RiccardoBucco,也许您可以同时更新这两个版本;)谢谢,这很管用,但老实说,我不理解你说的did@jean_pierre我补充了一个解释。谢谢,这很管用,但老实说,我不理解你的意思did@jean_pierre我补充了一个解释。