创建的元组的两个列表词典列表
问题描述:
我有一个元组集:创建的元组的两个列表词典列表
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])
是运作良好。但我想知道是否有更优雅的解决方案来解决我的问题。
答
你可以幻想与嵌套的默认类型的字典:
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
这非常有趣,谢谢! –
答
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
我想......我想
请提供样品输入输出中你的榜样! – schwobaseggl
什么是utenti和utente? – ozgur
请为您的元组集和元组列表提供[MCVE],以及给定演示输入的预期输出。我们应该能够将它复制并粘贴到解释器中,而不会有任何问题。 –