将元组列表转换为字典列表

问题描述 投票:0回答:3

我有一个元组列表:

[('Lebron James', datetime.date(2017, 12, 23), 500),
 ('Julie Peralta', datetime.date(2017, 12, 13), 1500),
 ('Reynaldo Pahay', datetime.date(2017, 12, 11), 2500)]

我想把它转换成字典列表:

[{'Name': 'Lebron James', 'date': datetime.date(2017, 12, 23), 'penalty': 500},
 {'Name': 'Julie Peralta', 'date': datetime.date(2017, 12, 13), 'penalty': 1500},
 {'Name': 'Reynaldo Pahay', 'date': datetime.date(2017, 12, 11), 'penalty': 2500}]

最好、最有效的方法是什么?

python python-3.x dictionary tuples
3个回答
12
投票

您可以使用

zip
功能。

def get_list_of_dict(keys, list_of_tuples):
    """
    This function will accept keys and list_of_tuples as args and return list of dicts
    """
    list_of_dict = [
        dict(zip(keys, values))
        for values in list_of_tuples
    ]
    return list_of_dict

演示

>>> import datetime
>>> 
>>> keys = ("name", "date", "penalty")
>>> 
>>> my_list_of_tuples = [
...     (
...         "Lebron James",
...         datetime.date(2017, 12, 23),
...         500,
...     ),
...     (
...         "Julie Peralta",
...         datetime.date(2017, 12, 13),
...         1500,
...     ),
...     (
...         "Reynaldo Pahay",
...         datetime.date(2017, 12, 11),
...         2500,
...     ),
... ]
>>> 
>>> get_list_of_dict(keys, my_list_of_tuples)
[{'name': 'Lebron James', 'date': datetime.date(2017, 12, 23), 'penalty': 500}, {'name': 'Julie Peralta', 'date': datetime.date(2017, 12, 13), 'penalty': 1500}, {'name': 'Reynaldo Pahay', 'date': datetime.date(2017, 12, 11), 'penalty': 2500}]
>>> 

5
投票
import datetime

data = [('Lebron James', datetime.date(2017, 12, 23), 500), 
        ('Julie Peralta', datetime.date(2017, 12, 13), 1500), 
        ('Reynaldo Pahay', datetime.date(2017, 12, 11), 2500)]

print([{'Name': name, 'date': date, 'penalty': penalty} for name, date, penalty in data])
# [{'Name': 'Lebron James', 'date': datetime.date(2017, 12, 23), 'penalty': 500}, {'Name': 'Julie Peralta', 'date': datetime.date(2017, 12, 13), 'penalty': 1500}, {'Name': 'Reynaldo Pahay', 'date': datetime.date(2017, 12, 11), 'penalty': 2500}]

2
投票
import datetime
lista = [('Lebron James', datetime.date(2017, 12, 23), 500), ('Julie Peralta', datetime.date(2017, 12, 13), 1500), ('Reynaldo Pahay', datetime.date(2017, 12, 11), 2500)]
output = [{"name":a[0], "date":a[1],'penalty':a[2]} for a in lista]
print(output)
© www.soinside.com 2019 - 2024. All rights reserved.