Python分析字典的列表TypeError:字符串索引必须为整数

时间:2019-12-01 12:24:30

标签: python-3.x

我有HTML表单输入字段,该字段返回一个字典列表,我希望通过在Django View中使用PYthon获取值。

表格返回:

request.POST['tags'] returns =>  [{"value":"summer"},{"value":"winter"}]

当我尝试使用[tag['value'] for tag in request.POST['tags']]遍历获取值时,我得到了TypeError: string indices must be integers

但是,如果我手动将输入字段的结果复制到命令行并逐行进行,则它会按预期工作:

>>> test = [{"value":"summer"},{"value":"winter"}]
>>> test
>>> [{'value':'summer'},{'value':'winter'}]
>>> [tag['value'] for tag in test]
>>> ['summer', 'winter']

发生了什么事?

已更新,添加了3个不同请求的打印。POST结果:

request.POST => <QueryDict: {'tags': ['[{"value":"summer"},{"value":"winter"}]']}>

request.POST.values => <bound method MultiValueDict.values of <QueryDict: {
'tags': ['[{"value":"summer"},{"value":"winter"}]']}>>

request.POST[tags] => [{"value":"summer"},{"value":"winter"}]

1 个答案:

答案 0 :(得分:0)

https://docs.djangoproject.com/en/2.2/ref/request-response/#querydict-objects

  

QueryDict.__getitem__(key)

     

返回给定键的值。如果键有多个值,则返回最后一个值。如果键不存在,则引发django.utils.datastructures.MultiValueDictKeyError。 (这是Python标准KeyError的子类,因此您可以继续捕捉KeyError。)

当同一键具有多个值时,您将不得不使用getlist()

[tag['value'] for tag in request.POST.getlist('tags')]

https://docs.djangoproject.com/en/2.2/ref/request-response/#django.http.QueryDict.getlist

  

QueryDict.getlist(key, default=None)

     

使用请求的键返回数据列表。如果该键不存在且未提供默认值,则返回一个空列表。除非提供的默认值不是列表,否则保证返回列表。


编辑

好的,我现在可以看到问题。您不是要向arg tags发送列表,而是要发送表示列表的字符串。

如果我什么都不缺,那么应该可以进行以下操作:

import json

tags = json.loads(request.POST['tags'])
[tag.get('value') for tag in tags]