Python 3:如何将数组转换为字典列表?

时间:2016-09-04 11:07:32

标签: python arrays dictionary

def get_list(name, ids):
    single_database = {}  
    database = [] 
    for id in ids:
        single_database['id'] = id
        single_database['name'] = name
        database.append(single_database.copy()) 

    return database

input = [{'name': 'David', 'id': ['d1','d2']},
            {'name':'John', 'id': ['j1','j2']}]

for single_database in input:
        get_list(single_database['name'], single_database['id'])

您好, 我想将上面的“输入”数组转换为字典列表,所以我编写了代码来转换它们。但是,“get_list”函数只释放最后一个字典。那么,如何获取所有字典列表并继续使用“get_list”函数。另外,除了我的方式,还有什么办法可以更快地转换这个输入?

这是我想要的输出:

{'id': 'd1', 'name': 'David'}
{'id': 'd2', 'name': 'David'}
{'id': 'j1', 'name': 'John'}
{'id': 'j2', 'name': 'John'}

2 个答案:

答案 0 :(得分:8)

这应该有效

list_of_dicts = [
    {'id': id, 'name': d['name']}
    for d in input
    for id in d['id']
]

或更详细的形式:

def get_list(input):

    list_of_dicts = []

    for d in input:
        for id in d['id']:
            list_of_dicts.append({
                'id': id, 
                'name': d['name']
            })        

    return list_of_dicts

一般情况下,尽量避免使用临时变量(例如single_database)并改用文字。

此外,input是变量名称的不良选择,因为它隐藏了一个重要的内置函数。

答案 1 :(得分:2)

你可以用单行代码构建它,Beauty of python

result = [{'id':j,'name':i['name']} for i in input_dict for j in i['id']]

结果

[{'id': 'd1', 'name': 'David'},
 {'id': 'd2', 'name': 'David'},
 {'id': 'j1', 'name': 'John'},
 {'id': 'j2', 'name': 'John'}]