2016-09-04 9 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:配列を辞書のリストに変換するには?

これは私が欲しい出力されます:これは

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

以上の冗長な形式で動作するはず

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

答えて

8

:一般的に

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は変数名としては不適切です。 pythonの

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'}] 
関連する問題