2014-12-04 81 views
-3
materialCheck = [] 
    materialCheck.append(str(data['material'])) 
    materialCheck.append(str(data['kind'])) 
    dct = dict((key, tuple(v for (k, v) in pairs)) 
     for (key, pairs) in itertools.groupby(materialCheck, lambda pair: pair[0])) 
    print dct 

我试图将数据添加到列表中,并试图做一些这样的事 {1:(“A”,“B”),2:( 'C')}ValueError异常:值过多解压蟒蛇在阅读列表

+0

'data'是怎么样的? – Marcin 2014-12-04 07:10:29

+0

死亡双人模样是怎样的? – 2014-12-04 07:12:44

+0

materialCheck = [('1111','U'),('1111','D'),('1111','U +'),('222','U')]我试图将列表更改为{1111:('U','D','UP +'),222:('u')} ...它引发错误ValueError:解包的值太多 – Shesha 2014-12-04 07:15:15

回答

0

不知道到底是什么你的代码是干什么的,但你可以做你想做的,如下所示:

from collections import defaultdict 

materialCheck=[('1111','U'),('1111','D'),('1111','U+'),('222','U')] 

a_dict = defaultdict(list) 

for k,v in materialCheck: 
    a_dict[k] += v 

print(a_dict) 

输出:

defaultdict(<type 'list'>, {'1111': ['U', 'D', 'U', '+'], '222': ['U']}) 
0

对于您的要求(元组列表转换成字典),你可以这样做以下(不包括输入的库如集合,itertools等)

materialCheck=[('1111','U'),('1111','D'),('1111','U+'),('222','U')] 
output_dict = {} 
for item in materialCheck: 
    if item[0] not in output_dict: 
     output_dict[item[0]] = [] 
    output_dict[item[0]].append(item[1]) 

这样做。

如果您希望以您的方式完成此操作,则错误与行dct = dict((key, tuple(v for (k, v) in pairs))一致。这应该为你工作:

materialCheck = [] 
materialCheck.append(str(data['material'])) 
materialCheck.append(str(data['kind'])) 
dct = {} 
for (key, pairs) in itertools.groupby(materialCheck, lambda pair: pair[0]): 
    dct[key] = tuple(v for (k, v) in pairs) 
print dct 

的ValueError异常是可能的,如果data['material']data['kind']不是一个两个值列表。所需的输入将如下所示:

data = {'material' : [('1111', 'U'), ('222', 'U')], 'kind' : [('1111', 'D'), ('1111', 'U+')]}