繁体   English   中英

从两个元组列表创建字典列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM