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

时间:2016-11-21 17:36:15

标签: python dictionary

我有一组元组:

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])

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

2 个答案:

答案 0 :(得分:0)

$fp = popen("tail ".$file, "r");

我猜......我想

答案 1 :(得分:0)

你可以使用嵌套的默认dicts:

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']