python使用外键将元组列表转换为Dict

时间:2019-05-27 09:51:59

标签: python-3.x dictionary tuples

我有一个这样的元组列表

[
(1,'a'),
(2,'b'),
(3,'c'),
(4,'d'),
(5,'e')
]

结果应该是字典列表

[
{'id': 1, 'label': 'a'},
{'id': 2, 'label': 'b'},
{'id': 3, 'label': 'c'},
{'id': 4, 'label': 'd'},
{'id': 5, 'label': 'e'}
]

我正在使用python 3.6
每个元组中的第一个值称为'id',每个元组中的第二个值
称为'label'。
我想在不使用循环的情况下获得上述结果,因为数据将非常庞大。 有内置的方法可以达到我的结果吗?

3 个答案:

答案 0 :(得分:2)

使用map

例如:

data = [
(1,'a'),
(2,'b'),
(3,'c'),
(4,'d'),
(5,'e')
]

keys = ["id", 'label']    
print(list(map(lambda x: dict(zip(keys, x)), data)))

#List comprehension 
#print([dict(zip(keys, i)) for i in data])

输出:

[{'id': 1, 'label': 'a'},
 {'id': 2, 'label': 'b'},
 {'id': 3, 'label': 'c'},
 {'id': 4, 'label': 'd'},
 {'id': 5, 'label': 'e'}]

答案 1 :(得分:1)

一个简单的理解就可以了:

l = [
(1,'a'),
(2,'b'),
(3,'c'),
(4,'d'),
(5,'e')
]
results = [{"id" : id, "label": label} for id, label in l]

如果您的数据太大,则可以使用生成器(这样它就会被延迟评估):

    results = ({"id" : id, "label": label} for id, label in l)

或使用map

    results = map(lambda x: {"id" : x[0], "label": x[1]}, l)

答案 2 :(得分:1)

import itertools as it     # pip install itertools 
ids=[]   # lists
a=[
(1,'a'),        # input
(2,'b'),
(3,'c'),
(4,'d'),
(5,'e')
]
for i, j in a :
#    for j in i:
    di=("id", i ,"label", j)
    ids.append(dict(it.zip_longest(*[iter(di)] * 2, fillvalue="")))
print(ids)
output :

[{'id': 5, 'label': 'e'}, {'id': 5, 'label': 'e'}, {'id': 5, 'label': 'e'}, {'id': 5, 'label': 'e'}, {'id': 5, 'label': 'e'}]