簡體   English   中英

如何從 python 中的列表列表中創建字典列表?

[英]How to create a list of dictionaries from the list of lists in python?

有一個名為“people”的列表列表: people=[['Sara Smith', 42, 'female', 35000], ['John Lee', 25, 'male', 25000]]我想創建字典列表: person=[{'name:'Sara Smith', 'age':42, 'gender':'female', 'income':35000}, {'name:'John Lee', 'age':25, 'gender':'male', 'income':25000}]我該怎么做呢?

我試過這個:

fields=['name', 'age', 'gender', 'income']
print(len(people))
for i in range(0, len(people)):
    exec("people%d = %s" % (i + 1, repr(people[i])));
    person=[]
    person.append(dict(zip(fields, people[i])))
    print(people[i])
print(person)

但由於某種原因,由於“打印(人)”,我有 [{'name': 'John Lee', 'age': 25, 'gender': 'male', 'income': 25000}]。 我無法理解,為什么我的結果在列表中只包含一個人 [1] 的字典,也許有一些更優雅的任務解決方案

您可以使用列表理解將dict()zip fields用於每個字段。

people=[['Sara Smith', 42, 'female', 35000], ['John Lee', 25, 'male', 25000]]
fields = ['name', 'age', 'gender', 'income']

dict_people = [dict(zip(fields, l)) for l in people]

結果:

[{'name': 'Sara Smith', 'age': 42, 'gender': 'female', 'income': 35000}, {'name':'John Lee', 'age': 25, 'gender': 'male','income': 25000}]

這是一種更清潔的方法

people=[['Sara Smith', 42, 'female', 35000], ['John Lee', 25, 'male', 25000]]
fields=['name', 'age', 'gender', 'income']
person=[]
for i in people:
    person.append(dict(zip(fields, i)))
print(person)

Output 是:

[{'name': 'Sara Smith', 'age': 42, 'gender': 'female', 'income': 35000}, {'name': 'John Lee', 'age': 25, 'gender ':'男性','收入':25000}]

你實際上可以用一個字典理解來完成這一切。 除非絕對需要,否則我真的建議避免使用exec

嘗試這樣的事情:

person_dicts = [{"name": person[0], "age": person[1], "gender": person[2], "income": person[3]} for person in people]

輸出:

[{'name': 'Sara Smith', 'age': 42, 'gender': 'female', 'income': 35000}, {'name': 'John Lee', 'age': 25, 'gender': 'male', 'income': 25000}]

盡管這假設您的人員列表的單個人員的子列表始終以相同的方式排序。

編輯:

如果您不想使用推導式,您也可以隨時使用 for 循環。

person_dicts = []
for person in people:
    person_dicts.append({"name": person[0], "age": person[1], "gender": person[2], "income": person[3]})

如前所述,您可以使用 zip :

people=[['Sara Smith', 42, 'female', 35000], ['John Lee', 25, 'male', 25000]]
fields=['name', 'age', 'gender', 'income']

persons = []
for person in people:
    tmp_dict = {}
    for key, value in zip(fields, person):
        tmp_dict[key] = value
    persons.append(tmp_dict)

結果:

[
  {'age': 42, 'gender': 'female', 'income': 35000, 'name': 'Sara Smith'},
  {'age': 25, 'gender': 'male', 'income': 25000, 'name': 'John Lee'},
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM