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'}
答案 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'}]