2014-12-04 54 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+')]} 
相關問題