Python:将元组列表转换为dict列表

Emm*_*wik 1 python dictionary tuples python-3.x

我有一个元组列表:

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

我想将其转换为字典列表:

[{'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}]
Run Code Online (Sandbox Code Playgroud)

什么是最好和最有效的方法呢?

Abd*_*P M 6

你可以利用zip功能.

import datetime

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
Run Code Online (Sandbox Code Playgroud)

DEMO

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


print(get_list_of_dict(keys, my_list_of_tuples))
#output
#[{'date': datetime.date(2017, 12, 23), 'penalty': 500, 'name': 'Lebron James'}, {'date': datetime.date(2017, 12, 13), 'penalty': 1500, 'name': 'Julie Peralta'}, {'date': datetime.date(2017, 12, 11), 'penalty': 2500, 'name': 'Reynaldo Pahay'}]
Run Code Online (Sandbox Code Playgroud)


Roa*_*ner 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}]
Run Code Online (Sandbox Code Playgroud)