2016-11-10 3 views
0

Я следующий словарьPython: Словарь в Json файл

a = {'index': [1, 2, 3], 'similar': [[0, 2], [1, 2], [2, 1]], 'markets': [['A', 'C'], ['B', 'C'], ['A', 'B']]} 
keys = ['index', 'similar', 'markets'] 

И я хочу, чтобы это превратить его в файл JSon

как

{'index': 'elem1' , "similar" : [ {'elem0' 'elem2'} ] , "markets" : [{'marketA', 'marketC'}] } 
{'index': 'elem2 , "similar" : [ {'elem1' 'elem2'} ] , "markets" : [{'marketB', 'marketC'}] } 
{'index': 'elem3' , "similar" : [ {'elem2' 'elem1'} ] , "markets" : [{'marketA', 'marketB'}] } 

Я в настоящее время имеют

with open('result.json', 'w') as fp: 
    json.dump(a, fp) 

Но я не уверен как получить желаемый результат

Любая помощь будет высоко ценится

+0

На выходе вы видите несколько json-блоков, разделенных символами новой строки. Таким образом, это не «файл json», а «файл, содержащий много объектов json, разделенных линией». Это то, что вы хотите? если да, то как вы получаете эти множественные дикты? Вы можете открыть файл в режиме добавления несколько раз или сразу написать несколько dicts. – tdelaney

+0

yes Я хочу файл, содержащий много объектов json. –

+0

Итак, вы хотите сделать какое-то преобразование. Вы должны показать нам, что вы сделали до сих пор, и, возможно, включить некоторые намеки на то, что такое преобразование. SO обычно не является кодовым письмом. – tdelaney

ответ

0

Вы должны приспособить структуру вашего в настоящее время желаемых результатов. Ваши аналогичные и рыночные массивы содержат множества ([{'elem0', 'elem2'}]), что, конечно же, невозможно в JSON.

Я написал для вас необходимый фрагмент кода.

import json 
f = {'index': [1, 2, 3], 'similar': [[0, 2], [1, 2], [2, 1]], 'markets': [['A', 'C'], ['B', 'C'], ['A', 'B']]} 
res = {} 
for k,v in f.iteritems(): 
    for i, s_v in enumerate(v): 
     if not res.get(i): 
      res[i] = {} 
     if k == 'markets': 
      prefix = 'market' 
     else: 
      prefix = 'elem' 
     if isinstance(s_v, int): 
      res[i][k] = '%s%s' % (prefix, s_v) 
     else: 
      res[i][k] = [[]] 
      for _s_v in s_v: 
       res[i][k][0].append('%s%s' % (prefix, _s_v)) 
      res[i][k][0] = res[i][k][0] 
res = [v for k, v in res.iteritems()] 
print json.dumps(res) 

.. [{"index": "elem1", "similar": [["elem0", "elem2"]], "markets": [["marketA", "marketC"]]}, {"index": "elem2", "similar": [["elem1", "elem2"]], "markets": [["marketB", "marketC"]]}, {"index": "elem3", "similar": [["elem2", "elem1"]], "markets": [["marketA", "marketB"]]}] 
+0

Благодарим вас за предложение, однако оно не печатает выход желания. Ваше решение печатает {"index": "elem1"}, {"index": "elem2"}, {"index": "elem3"}, {"similar": [["elem0", "elem2"]]} , {"аналогичный": [["elem1", "elem2"]]}, {"similar": [["elem2", "elem1"]]}, {"markets": [["marketA", "marketC "]]}, {" markets ": [[" marketB "," marketC "]]}, {" markets ": [[" marketA "," marketB "]]}] –

+0

Я обновил ответ. Обратите внимание, что ваш желаемый результат не соответствует JSON, JSON не может хранить кортежи/наборы ([{'elem1', 'elem2'}]) => должен выводиться следующим образом: [['elem1', 'elem2 ']] или, альтернативно: [' elem1 ',' elem2 '] – alexisdevarennes

+0

Пожалуйста, отметьте вопрос как правильно, если это так. – alexisdevarennes

Смежные вопросы