我有一个这样的元组列表
[
(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'。
我想在不使用循环的情况下获得上述结果,因为数据将非常庞大。
有内置的方法可以达到我的结果吗?
答案 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'}]