我有一个Python列表,其中包含键/值对:
l=[ [1, 'A'], [1, 'B'], [2, 'C'] ]
Run Code Online (Sandbox Code Playgroud)
我想将列表转换为字典,其中每个键的多个值将聚合到一个元组中:
{ 1:('A', 'B'), 2:('C',) }
Run Code Online (Sandbox Code Playgroud)
迭代解决方案是微不足道的:
l=[ [1, 'A'], [1, 'B'], [2, 'C'] ]
d={}
for pair in l:
if d.has_key(pair[0]):
d[pair[0]]=d[pair[0]]+tuple(pair[1])
else:
d[pair[0]]=tuple(pair[1])
print d
{1: ('A', 'B'), 2: ('C',)}
Run Code Online (Sandbox Code Playgroud)
是否有更优雅的Pythonic解决方案来完成这项任务?
我在将值添加到集合中是字典中的值时遇到问题。我必须使用集合作为值而不是列表或其他任何东西。我已经看到了这个线程,但是并不能完全解决我的问题。
from collections import defaultdict
datoteka = open("vzorec.list","rt")
slovar = defaultdict(set)
for vrstica in datoteka:
seznam = vrstica.split("\t")
naslov = seznam[0]
beseda = seznam[len(seznam)-1]
beseda = beseda.strip()
naslov2 = ""
for crka in naslov:
if crka == "(":
break
else:
naslov2 = naslov2 + crka
naslov = naslov2.lstrip('"')
if naslov not in slovar:
slovar[naslov] = set(beseda)
elif naslov in slovar:
slovar[naslov] = slovar[naslov].add(beseda)
print(slovar)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,指出字符串类型没有添加功能。但是为什么python不理解我想要将集合作为值。我什至用defaultdict
所以我的主要目标很简单,我希望在使用单个键时返回多个值.但是我遇到了错误和令人困惑的行为.我是Python的新手,所以我完全期望这个问题有一个简单的原因.
我有一个对象列表,list它只包含对象的索引.即
1
2
3
4
etc..
Run Code Online (Sandbox Code Playgroud)
以及包含每个对象所属的组的文件,以相同的顺序列出.该文件是n行的单个值(n也是对象列表的长度.)即文件如下所示:
2
5
2
4
etc..
Run Code Online (Sandbox Code Playgroud)
意味着第一个对象属于组2,第二个对象属于组5,第三个属于组2,第四个属于组4.此文件将根据我的输入文件而改变.我尝试了以下两个建议(我可以找到).
编辑:我的最终目标:拥有一个字典,其中组号作为键,组中的对象作为值.
我首先查看了这个StackOverflow 问题,因为它非常相似,最后得到了这段代码:
def createdDict(list, file):
f = open(file, 'r')
d={}
i=0
for line in f:
groupIndex = int(line)
if groupIndex in d:
d[groupIndex].append(list[i])
else:
d[groupIndex] = list[i]
i +=1
print d
f.close()
Run Code Online (Sandbox Code Playgroud)
而这个错误:
AttributeError: 'Element' object has no attribute 'append'
Run Code Online (Sandbox Code Playgroud)
d[groupIndex]只是一个字典及其键,groupIndex也应该只是一个整数..而不是我之前在脚本中创建的类的对象.(为什么会出现此错误?)
然后,在我将这个问题变成后面之后,我修改了我的代码,因为我认为这是完成任务的另一种方法.我的代码看起来像这样:
def createdDict(list, file):
f = open(file, 'r')
d={}
i=0
for line in f:
groupIndex …Run Code Online (Sandbox Code Playgroud)