2016-09-04 3 views
0
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"함수를 사용하는 방법. 또한, 내 방식을 제외하고는이 입력을 더 빨리 변환 할 수있는 방법이 있습니까? 일반적으로Python 3 : 배열을 사전 목록으로 변환하는 방법은 무엇입니까?

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 

, 임시 변수를 피하려고 :

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

답변

8

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

또는 더 자세한 형태

작동합니다 :

출력이 내가 원하는입니다 (예 : single_database) 대신 리터럴을 사용하십시오.

또한 중요한 내장을 숨기기 때문에 input은 변수 이름에 적합하지 않습니다. 파이썬의

2

당신은 코드 한 줄이를 구축 할 수는 뷰티

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'}] 
관련 문제