Я не понимаю, почему в вашем dict нет B2
. Я также не уверен, что вы хотите совершить в случае повторяющихся значений столбца (каждый, кроме последнего, я имею в виду.) Предполагая, что первым является надзор, мы можем использовать рекурсию:
def recur_dictify(frame):
if len(frame.columns) == 1:
if frame.values.size == 1: return frame.values[0][0]
return frame.values.squeeze()
grouped = frame.groupby(frame.columns[0])
d = {k: recur_dictify(g.ix[:,1:]) for k,g in grouped}
return d
, который производит
>>> df
name v1 v2 v3
0 A A1 A11 1
1 A A2 A12 2
2 B B1 B12 3
3 C C1 C11 4
4 B B2 B21 5
5 A A2 A21 6
>>> pprint.pprint(recur_dictify(df))
{'A': {'A1': {'A11': 1}, 'A2': {'A12': 2, 'A21': 6}},
'B': {'B1': {'B12': 3}, 'B2': {'B21': 5}},
'C': {'C1': {'C11': 4}}}
. Возможно, проще использовать непандасский подход:
def retro_dictify(frame):
d = {}
for row in frame.values:
here = d
for elem in row[:-2]:
if elem not in here:
here[elem] = {}
here = here[elem]
here[row[-2]] = row[-1]
return d
В настоящее время нет никакого встроенного способа добавить cookie во время фазы действия/обратного вызова обработки запросов. Это наиболее вероятно дефект и отмечено в этой проблеме: http://code.google.com/p/seaside/issues/detail?id=48
Это в настоящее время намечается, чтобы быть зафиксированным для Побережья 2.9, но я не знаю, будет ли оно даже бэкпортировано к 2,8 или нет.
Следует иметь в виду, что существует уже (по умолчанию) перенаправление между фазами действия и рендеринга, чтобы препятствовать тому, чтобы Обновление повторно инициировало обратные вызовы, таким образом, в главной схеме вещей, еще одно перенаправление в этом случае не так плохо.
Если Вы все еще хотите вырыть далее, взглянуть на WARenderContinuation>> handleRequest:. Это - то, где обработка обратного вызова инициирована и начатая фаза перенаправления или рендеринга.
Отредактированный для добавления:
Проблема была теперь устранена, и (в коде последнего достижения) можно теперь правильно добавить cookie к текущему ответу в любое время. Просто получите доступ к объекту ответа в текущем контексте запроса и добавьте cookie. Например, Вы могли бы сделать что-то как:
self requestContext response addCookie: aCookie
Это вряд ли будет бэкпортировано к Побережью 2.8, поскольку оно потребовало довольно основного сдвига в способе, которым обрабатываются ответы.
Я только что изучил это подробно, и ответ, кажется, нет. А именно, нет никакого способа достигнуть ответ от WARenderCanvas или чего-либо, к чему он может получить доступ (он содержит на WARenderingContext, который содержит на WAHtmlStreamDocument, который содержит на поток ответа, но не сам ответ). Я думаю, что было бы разумно предоставить доступ контекста к текущему ответу, точно смочь установить заголовки на нем, но Вы спросили, был ли уже путь, таким образом: нет.
Тем не менее Побережье делает большое дополнительное перенаправление, и это, кажется, не оказывает большое влияние на пользовательский опыт, поэтому возможно, нужно должен прекратить вызывать беспокойство об этом кажущийся kludgey и пойти с потоком API, который это уже там :)