2016-09-08 2 views
2

У меня есть словарь ввода, который выглядит следующим образом:Python-словарь синтаксический и обновить лучше

{"payment": 
    {"payment_id": "AAHPW34190", "clm_list": 
     {"dtl": 
      [{"clm_id": "1A2345"}, 
      {"clm_id": "9999"} 
      ]}, 
     "payment_amt": "20"}} 

Мне нужен выход, чтобы выглядеть следующим образом:

{ "create": 
    { "_index": "website", "_type": "blog", "_id": "AAHPW34190"}} 
{"payment_id": "AAHPW34190", "clm_list": 
    {"dtl": 
     [{"clm_id": "1A2345"}, 
     {"clm_id": "9999"} 
     ]}, 
    "payment_amt": "20"} 

Значение _id в первом строка вывода выводится из payment_id. я могу получить выше вывод легко, выполнив следующие действия:

static_line={ "create": { "_index": "website", "_type": "blog", "_id": "0"}} 
orig={"payment": {"payment_id": "AAHPW34190", "clm_list": {"dtl": [{"clm_id": "1A2345"}, {"clm_id": "9999"}]}, "payment_amt": "20"}}` 
sec_line=orig["payment"] 
static_line["_id"]=sec_line["payment_id"]` 

Но мой вклад будет миллион Dict элементов, и я хочу сделать это как можно более эффективно. Так могу ли я сделать это лучше для миллиона диктов?

+0

вы читаете эти данные из файла или это уже в памяти? –

+0

В prod я буду читать его из файла, а вывод будет в файле. Я планирую использовать GNU параллельно, чтобы плюнуть на входной файл и передать его всем ядрам сервера, тем самым распараллеливая процесс – user3646519

ответ

0

Я переформатирую выход вашего ввода dict. предположим, что следующий dict - это элемент списка, в котором есть миллионы dict.

{"payment": {"payment_id": "AAHPW34190", 
       "clm_list": {"dtl": [{"clm_id": "1A2345"}, {"clm_id":"9999"}]}, 
      "payment_amt": "20"} 
} 

использовать список понимание для извлечения payment_id и создать новый Dict

[{ "create": { "_index": "website", "_type": "blog", "_id": d['payment']['payment_id']}} 
for d in my_list_of_dict]