2016-11-21 81 views
0

我有一个元组集:创建的元组的两个列表词典列表

users = set(("[email protected]","password"),("[email protected]","password")) 

但可以简化为一组...和元组的列表:

licences = [("[email protected]","22"),("[email protected]","23"),("[email protected]","12")] 

对于列表的每个条目,用户名可以用不同的“许可证”值重复。

我需要建立一个字典列表如下:

[{"user":"[email protected]", "licences":["22","23"]},{"user":"[email protected]", "licences":["12"]}] 

什么我迄今所做的是这样的:

licenzadiz = [] 
for num,user in enumerate(users): 
    licenzadiz.append({'user': user[0], 'licences': []}) 
    for num2,licence in enumerate(licences): 
     if user[0] == licence[0]: 
      licenzadiz[num]['licences'].append(licence[1]) 

是运作良好。但我想知道是否有更优雅的解决方案来解决我的问题。

+0

请提供样品输入输出中你的榜样! – schwobaseggl

+0

什么是utenti和utente? – ozgur

+1

请为您的元组集和元组列表提供[MCVE],以及给定演示输入的预期输出。我们应该能够将它复制并粘贴到解释器中,而不会有任何问题。 –

回答

0

你可以幻想与嵌套的默认类型的字典:

from collections import defaultdict 

items = [('A','1'),('A','3'),('A','2'), 
     ('B','0'),('B','4'),('B','-1'), 
     ('C','7'),('C','6'),('C','12')] 

d = defaultdict(lambda: defaultdict(list)) 

for use,lic in items: 
    d[use]['username'] = use #<-- Overwrites each time an already known key is found, but thats ok 
    d[use]['licence'].append(lic) 


#Just for printout 
for use in d: 
    print d[use] 
    print d[use]['username'] 
    print d[use]['licence'] 

输出:

defaultdict(<type 'list'>, {'username': 'A', 'licence': ['1', '3', '2']}) 
A 
['1', '3', '2'] 
defaultdict(<type 'list'>, {'username': 'C', 'licence': ['7', '6', '12']}) 
C 
['7', '6', '12'] 
defaultdict(<type 'list'>, {'username': 'B', 'licence': ['0', '4', '-1']}) 
B 
['0', '4', '-1'] 
+0

这非常有趣,谢谢! –

0
data = {} 
for num2,(email, license) in enumerate(licenze): 
    data.setdefault(email,[]).append(license) 

print data #dictionary of email:[licenses,..] 
#or 
print data.items() # if you want a list 

我想......我想