如何更改Dictionary的值/类型并将它们放回去

时间:2013-12-11 09:46:03

标签: jquery python json dictionary

我有一个用于捕获用户详细信息的表单,在此表单中我有许多单选按钮组,其值为truefalse。而且我还有多选框,我需要将其转换为列表。

我希望在序列化为JSON并将它们发送到服务器端之前将这些字段转换为布尔值和列表。目前我正在服务器端转换这些值。

当我序列化时,它发送NestedMultiDict,它是一个元组列表的字典。 我需要将单选按钮(当前字符串)的值转换为布尔值,并将多选的值放在列表中。 这就是我目前的情况:

的jQuery / AJAX:

$("button").click(function(e) {
            e.preventDefault();
            $("input,select,textarea").jqBootstrapValidation();
            var url = "{{'candidates.json'|route_url}}";
            var data = $("form[name=modify]").serialize();

            console.log(data);
            //console.log(data);
            $.post(url, data).success(function() {
                update_messages();
            }).error(function() {
                console.log(url);
                alert("failed");
            });
        });

Python:

def getBool(**d):
        for k,v in d.iteritems():
            if v == "True":
                d[k] = True            
                print "true",d[k]
            elif v == "False":
                d[k] = False
                print "false",d[k]
        return d

当我需要将多选值放入列表并返回字典时,问题就出现了。我不知道如何转换值,然后将它们放回字典中。

有可能这样做吗?如果是这样,我怎么能做到这一点?

作为一个侧面问题:这种方法最有效的方法是什么?

1 个答案:

答案 0 :(得分:0)

我稍微改变了bool函数,看起来像是:

def bool(boolean):
    if boolean == "True":
        return True
    else:
        return False

现在在我的Python函数中,我使用Ajax请求处理序列化数据,我只是这样做:

if self.context.relocate:
            self.context.relocate = bool(self.context.relocate)

我发现我不需要将它放回NestedMultiDict,因为self.context处理应该插入数据库的数据。所以现在我将数据保存到数据库而不用担心将数据放回Dict ......

我使用名为Pyramid的框架MongoDBMongoEngine(只是上面的代码更有意义)。

我希望这可以帮助别人。