2013-06-18 7 views
-1

У меня есть словарь python, который я хочу преобразовать в json.Преобразуйте этот словарь python в формат JSON?

словарь Python:

{"20090209.02s1.1_sequence.txt": [645045714, 3559.6422951221466, 206045184], "20090209.02s1.2_sequence.txt": [645045714, 3543.8322949409485, 234618880]} 

Желаемый результат:

{ 
     "file_name":"20090209.02s1.1_sequence.txt", 
     "file_information": [645045714, 3559.6422951221466, 206045184], 

    { 
     "file_name":"20090209.02s1.2_sequence.txt", 
     "file_information": [645045714, 3543.8322949409485, 234618880], 

    } 
} 

Пробовал с json.dumps, но я не получил желаемый результат.

+0

@ AndyHayden: Здесь больше происходит. Это не очень печатная проблема. –

+2

Ваш выход недействителен * JSON; Вы имели в виду, что вместо этого это список словарей? –

+0

@MartijnPieters eeew what * is * it ?! –

ответ

5

Вы должны сначала создать структуру с правильным форматом:

import json 

dict_ = {"20090209.02s1.1_sequence.txt": [645045714, 3559.6422951221466, 206045184], "20090209.02s1.2_sequence.txt": [645045714, 3543.8322949409485, 234618880]} 
values = [{"file_name": k, "file_information": v} for k, v in dict_.items()] 
json.dumps(values, indent=4) 

Примечания что желаемый выход json выглядит неважно. Вот результат для этого кода:

[ 
    { 
     "file_name": "20090209.02s1.1_sequence.txt", 
     "file_information": [ 
      645045714, 
      3559.6422951221466, 
      206045184 
     ] 
    }, 
    { 
     "file_name": "20090209.02s1.2_sequence.txt", 
     "file_information": [ 
      645045714, 
      3543.8322949409485, 
      234618880 
     ] 
    } 
] 
+0

Да, это то, чего я хочу. Я буду принимать ваш ответ, когда смогу. – pynovice

1

Сплит из ваших пар ключа-значения в отдельные словари:

json.dumps([{'file_name': key, 'file_information': value} for key, value in yourdict.iteritems()]) 

Обратите внимание, что порядка вашей продукции будет произвольным (словари не имеют фиксированную упорядоченности). Вы можете сортировать вывод для получения предсказуемого списка:

from operator import itemgetter 

data = [{'file_name': key, 'file_information': value} for key, value in yourdict.iteritems()] 
data.sort(key=itemgetter('file_name')) 
json.dumps(data) 

Это производит:

>>> data = [{'file_name': key, 'file_information': value} for key, value in yourdict.iteritems()] 
>>> data.sort(key=itemgetter('file_name')) 
>>> json.dumps(data) 
'[{"file_name": "20090209.02s1.1_sequence.txt", "file_information": [645045714, 3559.6422951221466, 206045184]}, {"file_name": "20090209.02s1.2_sequence.txt", "file_information": [645045714, 3543.8322949409485, 234618880]}]' 
>>> print json.dumps(data, indent=4) 

[ 
    { 
     "file_name": "20090209.02s1.1_sequence.txt", 
     "file_information": [ 
      645045714, 
      3559.6422951221466, 
      206045184 
     ] 
    }, 
    { 
     "file_name": "20090209.02s1.2_sequence.txt", 
     "file_information": [ 
      645045714, 
      3543.8322949409485, 
      234618880 
     ] 
    } 
] 
+0

Hm Я хочу добавить эти ключи, называемые file_name и file_information. – pynovice

+0

Я думаю, что вам не хватает смысла здесь, формат dict и формат json разные :) –

+0

Да, это то, что я хотел. +1 – pynovice

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