Найти - Пользователи
Полная версия: Объединение нескольких листов в один и последующая генерация JSON
Начало » Python для экспертов » Объединение нескольких листов в один и последующая генерация JSON
1
kise97
Добрый день.

У меня есть такие переменные

list1=['sth param1', 'aesdf', 'asdasd','asdsda']
list2=['sth param2', 'asdasds', 'sdasdd',asdasdasa']
list3=['sth param3','sadasd','asdas]
''' Количество параметров у листов различно или одинаково '''
type='adsad'
num='12332'
И из всего этого мне нужно сгенерировать JSON примерно такого содержания:

{
    'type':'adsad',
    'num':'12332',
    list:[
        'list1':[   
            'sth param1',
            'sth param2',
            'sth param3',
        ],
        'list2':[   
            'aesdf',
            'asdasds',
            'sadasd',
        ],
        'list3':[   
            'asdasd',
            'sdasdd',
            'asdas',
        ],
        'list4':[   
            'asdsda',
            'asdasdasa',
            '',
        ],
    ]
}

К сожалению моих знаний недостаточно чтобы провернуть подобное. Может ли кто то направить меня на истинный путь?
JOHN_16
Конкретно под ваш пример, однако в реальности так писать не стоит -дурной тон . К тому же вы совершаете потенциальную ошибку переопределяя встроенные функции Питона - в данном случае type().
import json, collections
list1=['sth param1', 'a', 'aa','aaa']
list2=['sth param2', 'b', 'bb','bbb']
list3=['sth param3', 'c','cc']
type_of_something='my_value'
num='2012'
tmp=map(None, list1, list2, list3)
print json.dumps({'type': type_of_something,
            'num': num,
            'list': collections.OrderedDict((('list1', tmp[0]),
                     ('list2', tmp[1]),
                     ('list3', tmp[2]),
                     ('list4', tmp[3])
                     ))
            })

{"list": {"list1": ["sth param1", "sth param2", "sth param3"], "list2": ["a", "b", "c"], "list3": ["aa", "bb", "cc"], "list4": ["aaa", "bbb", null]}, "num": "2012", "type": "my_value"}[s][/s]

исправление: OrderedDict здесь используется для упорядоченного вывода содержимого ключа “list”, хотя ,разумеется, можно использовать и sorted. На самом деле это вам под ваши задачи решать что и как писать.
kise97
Да, я такое решение уже принимал во внимание, но тем не менее это решение довольно вялое.
Может быть есть более адекватные варианты решения поставленной задачи?
JOHN_16
kise97
Что значит вялое? каким вы видите “адекватное” решение. В любой форме изъяснитесь.
kise97
Адекватного ответа, увы, но дать не смогу. Плохо выражаю письменно свои мысли.

Ну к примеру может быть есть какие либо классы или расширения к python для создания JSON?
JOHN_16
kise97
Т.е. вы хотите ручками, с нуля создать JSON?
Lexander
json.JSONEncoder().encode({"type": type1, "num": num, "list": {"list1": list1, "list2": list2, "list3": list3}})
или свой кодировщик создайте
class MyEncoder(json.JSONEncoder):
    def default(self, type1, num, list1, list2, list3):
        return [{"type": type1, "num": num, "list": {"list1": list1, "list2": list2, "list3": list3}}]
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB