Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python 3中通过引用更新嵌套键的值_Python_Json_Dictionary_Flask - Fatal编程技术网

在python 3中通过引用更新嵌套键的值

在python 3中通过引用更新嵌套键的值,python,json,dictionary,flask,Python,Json,Dictionary,Flask,我有以下字典: watch_list= {'videos': [{'systemId': 'qre', 'duration': 19}, {'systemId': 'abc', 'duration': 19}]} 现在,我想检查字典中是否已经存在systemId,如果是,则通过systemId更新持续时间 因此,我尝试以下代码: def update_duration(watch_list,system_id,duration): watch_history= next((a for a

我有以下字典:

  watch_list=  {'videos': [{'systemId': 'qre', 'duration': 19}, {'systemId': 'abc', 'duration': 19}]}
现在,我想检查字典中是否已经存在systemId,如果是,则通过systemId更新持续时间

因此,我尝试以下代码:

def update_duration(watch_list,system_id,duration):
watch_history= next((a for a in watch_list if a['systemId'] == system_id), None)
if watch_history:
    watch_history['duration'] =duration
    return watch_history
但这给了我一个错误:

*** TypeError: string indices must be integers
我是python新手,我读过stack overflow的其他解决方案,但没能让它工作。有人能帮我一点忙吗,关于如何通过systemId更新值


我正在使用Python3和flask

来遍历字典,比如

my_dictionary={'hello':['I','am','a','dictionary']} 对于my_dictionary中的条目: 打印条目 默认情况下,输出将是hello,因为它会遍历其键。看起来您实际上想要遍历字典的值,您需要调用values函数,或者Python2中的itervalues


除此之外,您还遇到了生成器的if语句的问题。此时,您的a变量包含一个字典列表——过去是watch_list['videos']找到的值。

watch_list不是字典,但是一个只有一个字符串的列表。正如Devesh所说,您使用的是str而不是dict。您可以使用json.loadsmyDict将其转换为dict,并修复其他逻辑,或者通过字符串搜索duration和systemId来手动获取值它不是字符串Pdb typewatch_list它的dictPdb printwatch_list{'videos':[{'systemId':'qre',duration 19},{'systemId':'abc','duration':19}]}这是完整的输出如果i['systemId']==system\u id:如果我这样做,我会出现以下错误:TypeError:列表索引必须是整数或片,而不是str:确切地说,这就是我答案的最后一段所说的。此时,a=[{'systemId':'qre','duration':19},{'systemId':'abc','duration':19}]。