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}}
谢谢你读我的书
谢谢,它可以工作,但我必须只有唯一的值,而且我不想有列表您可以使用:
或者使用pythondict
我们可以使用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我补充了一个解释。