[英]create a list of dictionaries from two lists of tuples
我有一组元组:
users = set(("test@a.com","password"),("test@b.com","password"))
但可以简化为一组...和元组列表:
licences = [("test@a.com","22"),("test@a.com","23"),("test@b.com","12")]
对于列表的每个条目,可以使用不同的“许可证”值来重复用户名。
我需要建立这样一个字典列表:
[{"user":"test@a.com", "licences":["22","23"]},{"user":"test@b.com", "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])
运作良好。 但是我想知道是否有更优雅的解决方案来解决我的问题。
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
我想...我想
您可以使用嵌套的默认字典:
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']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.