Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.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 .json文件中的嵌套字典|迭代问题_Python_Json - Fatal编程技术网

Python .json文件中的嵌套字典|迭代问题

Python .json文件中的嵌套字典|迭代问题,python,json,Python,Json,由于某些原因,方法B(如下代码块中所示)不起作用。没有错误。。。它永远不会传递第三个if语句。 请注意messageID参数的双==,因为我需要字符串类型 @命令(name=“test”) 异步定义rr(self,ctx,messageID:Optional[int],group:str,*,title:Optional[str]=“未提供标题”): 将open('./path_to_file/test.json','r',encoding=“utf-8”)作为f: data=json.load

由于某些原因,方法B(如下代码块中所示)不起作用。没有错误。。。它永远不会传递第三个
if
语句。 请注意
messageID
参数的双
==
,因为我需要字符串类型

@命令(name=“test”)
异步定义rr(self,ctx,messageID:Optional[int],group:str,*,title:Optional[str]=“未提供标题”):
将open('./path_to_file/test.json','r',encoding=“utf-8”)作为f:
data=json.load(f.read())
groupId=数据['RRGroups']
msgIDs=data['msgIDs']
#工作
如果组位于GroupID中:
groupEntry=groupIDs[group]
打印(组条目)
#方法A-工作
messageID==(如果msgIDs.keys()中有messageID,则msgIDs中的msgID的msgIDs['msgID']
如果消息ID为:
打印(“msg找到A”)
打印(消息ID)
#方法B-不工作
如果msgIDs中的messageID:#也尝试使用msgIDs.keys()
打印(“msg发现B”)
msgID==msgIDs[messageID]
打印(msgID)
json文件结构:

{
“集团”:{
“groupA”:{
“keyA1”:“valueA1”,
“keyA2”:“valueA2”
},
“B组”:{
“键B1”:“值B1”,
“keyB2”:“valueB2”
},
“C组”:{
“键C1”:“值C1”,
“键C2”:“值C2”
}
},
“msgIDs”:{
"838493938373099531":"832636716380586015",
"836977954025504819":"832636716380586015",
"836977964402999326":"832636716380586015"
}
}

表达式
(c中a代表b)
是一个生成器表达式,在
if
中计算为
True
,无论它是否为空。它中的
for
-循环在您的情况下不会执行。“它只是永远不会传递if语句”请更准确地说,有三个
if
语句。我要么误解了您的答案,要么您错过了方法A(确实包含
for
循环)上面的注释。方法A工作正常,并成功打印msgID字符串。问题在于我的方法B,我试图使用与groupID相同的逻辑。修复了初始消息。第三个
if
语句。第一个和第二个正在工作fine@Taraxiah“方法A”似乎只起作用。尝试将
if-messageID
替换为
if-list(messageID)
,您将看到原因。