Когда я делаю 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
, когда я его использую.
repr()
методаOrderedDict
из метода_asdict()
? - person kindall   schedule 17.09.2013