Python 3.x Python分析字典列表TypeError:字符串索引必须是整数

Python 3.x Python分析字典列表TypeError:字符串索引必须是整数,python-3.x,Python 3.x,我有一个HTML表单输入字段,它返回我希望在Django视图中使用PYthon获取值的字典列表 表格返回: request.POST['tags'] returns => [{"value":"summer"},{"value":"winter"}] 当我尝试对请求中的标记使用[tag['value']进行交互时。POST['tags']要获取值,我得到类型错误:字符串索引必须是整数 但是,如果我手动将输入字段结果复制到命令行并逐行执行,它将按预期工作: >>> te

我有一个HTML表单输入字段,它返回我希望在Django视图中使用PYthon获取值的字典列表

表格返回:

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

当我尝试对请求中的标记使用
[tag['value']进行交互时。POST['tags']
要获取值,我得到
类型错误:字符串索引必须是整数

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

>>> test = [{"value":"summer"},{"value":"winter"}]
>>> test
>>> [{'value':'summer'},{'value':'winter'}]
>>> [tag['value'] for tag in test]
>>> ['summer', 'winter']
发生了什么事

更新以添加3个不同请求的打印。发布结果:

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"}]
request.POST=>
request.POST.values=>
request.POST[tags]=>[{“value”:“summer”},{“value”:“winter”}]

QueryDict.\uuuu获取项目\uuuuuuuuuuuuuuuuuu(键)

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

当同一个键有多个值时,必须使用用户
getlist()

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

QueryDict.getlist(键,默认值=None)

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


编辑

好的,我现在明白了。您没有向arg
标记发送列表,而是发送表示列表的字符串

如果我没有遗漏任何其他内容,则以下内容应适用:

import json

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

我怀疑它之间可能有更多的层次-你能试试:
[tag for tag in request.POST['tags']]
仔细检查一下,如果这个
标签
真的是一个dict吗?@GrzegorzSkibinski
标签
(或者
请求.POST['tags']
,甚至是
请求.POST
,就我们所知)显然是一个字符串,基于这个错误,我怀疑:
[eval(tag)['value']用于请求中的标记。POST['tags']]
[tag['value']用于eval(请求。POST['tags'])]
应该做什么?@GrzegorzSkibinski从不使用
eval
json.loads
应该是这里的修复程序(或者更好的,
request.json()
或web framework OP中使用的类似解决方案)添加了额外的
request.POST
结果
[tag['value']for tag in eval(request.POST['tags'])]
=>
['summer',winter']
[tag['value']for tag in request.POST.getlist('tags')]
还返回错误
字符串索引必须是整数