Ошибка искаженной строки — Python — преобразование строкового представления. словаря

Когда я делаю ast.literal_eval(), я получаю ValueError: malformed string для строки ниже z = ast.literal_eval(a). Почему это не работает?

(Пожалуйста, обратите внимание - «что-то» в строке ниже имеет 4 или более именованных кортежа)

for thing in something:

    a = thing._asdict()

    z = ast.literal_eval(a)
    print z

Если я сделаю простое print a, я получу

OrderedDict([('a', 0.0), ('b', 0.0), ('c', 0.0), ('d', 100.0)])

Без ast.literal_eval(a), когда я пытаюсь использовать "a" в качестве словаря, возникает AttributeError: 'str' object has no attribute 'items'. Вот расширенный код -

for thing in something:

    a = thing._asdict()
    print a


    z = ast.literal_eval(a)
    print a



    d = {}
    for in_d in z:

        for k, v in in_d.iteritems():
            d.setdefault(k, []).append(v)  
            print d

    merged = {}
    for d in z:
        d=d[1:-1]

        for k, v in d.items():
            if k not in merged: merged [k] = []
            merged [k].append (v)
            print merged

Изменить: когда я пытаюсь использовать json.loads(thing), я получаю TypeError: expected string or buffer. Так что я думаю, что thing это не строка. Тогда я не знаю, почему он жалуется, что это str object, когда я его использую.


person askance    schedule 16.09.2013    source источник
comment
Что это за объекты, которые возвращают repr() метода OrderedDict из метода _asdict()?   -  person kindall    schedule 17.09.2013
comment
Думаю, я запутался между «dict» и «OrderedDict». Я упоминаю еще один результат в комментарии к ответу alecxe ниже.   -  person askance    schedule 17.09.2013