如何从QueryDict中提取项目,其中包含具有多个值的键?

时间:2017-05-20 07:52:08

标签: python django dictionary

我有 QueryDict

>>> from django.http import QueryDict
>>> q = QueryDict('a=1&a=2&c=3')

我需要一段返回此结果的代码:

{ u'a': [u'1',u'2'], u'c': u'3'}

我应该通知你,dict(q.iterlists())会返回此信息:

{ u'a': [u'1', u'2'], u'c': [u'3']}

此致

3 个答案:

答案 0 :(得分:2)

更短的答案:

@RestController
    public class  DataInsertController {


        @RequestMapping(value = "data/api", consumes={MediaType.APPLICATION_JSON_VALUE},method = RequestMethod.POST)
        public ResponseEntity<HostResponse> createAuthenticationToken(@RequestBody Map<String,Object> hostMap )  {

             // handle json object exceptions to validate input
            JSONObject jsonObject = new JSONObject(hostMap);            
            Host host = new ObjectMapper().readValue(jsonObject.toString()  , Host.class);

            System.out.println(host.getName());
            return ResponseEntity.ok(new HostResponse("token"));
        }
}

答案 1 :(得分:1)

如果你想将querydict转换成json,

你可以这样做,

>>> from django.http import QueryDict
>>> q = QueryDict('a=1&a=2&c=3')
>>> q
<QueryDict: {'c': ['3'], 'a': ['1', '2']}>   

我实际上是这样做的,

>>> string_dict = json.loads(json.dumps(dict(q)))
>>> string_dict
{'c': ['3'], 'a': ['1', '2']}

>>> for item in string_dict:
...     if len(string_dict[item]) == 1:
...         string_dict[item] = string_dict[item][0]
... 
>>> string_dict
{'c': '3', 'a': ['1', '2']}

答案 2 :(得分:1)

我同意你 不希望这样的评论。

无论如何,这种理解摆脱了unicode字符串(再次,你不应该想要这个)和单值列表:

d = { 'a': ['1', '2'], 'c': [u'3']}
>>> {k:(map(str, v) if len(v) > 1 else str(v[0])) for k,v in d.items()}
{'a': ['1', '2'], 'c': '3'}