我在遍历排序的嵌套字典时遇到了麻烦。嵌套字典是指包含其他字典的字典:
{"A":
{"subA": {"Date": ["date1", "date2"],
"numDownloads": [int1, int2]}
"subB": {"Date": ["date3", "date4"],
"numDownloads": [int3, int4]}
}
"B":
{"subC": {"Date": ["date5", "date6"],
"numDownloads": [int5, int6]}
"subD": {"Date": ["date7", "date8"],
"numDownloads": [int7, int8]}
}
}
我想对第二级密钥(subA,subB(A和subC,subD,B))中的每个第一级密钥(在这种情况下为A和B)进行迭代,并按numDownloads的第一值递增int1,A的int 3和B的int 5,int 7)。
如果我举一个我想要的例子: 考虑一下这个词典:
{"A":
{"subA": {"Date": ["date1", "date2"],
"numDownloads": [100, 500]}
"subB": {"Date": ["date3", "date4"],
"numDownloads": [500, 1000]}
}
"B":
{"subC": {"Date": ["date5", "date6"],
"numDownloads": [10000, 50000]}
"subD": {"Date": ["date7", "date8"],
"numDownloads": [500, 1000]}
}
}
我想遍历A,然后用subA然后将subB作为subA的第一个numDownloads值(100)低于subB第一个numDownloads的值(500),并且尽管使用B并用subD然后subC和subC的第一个numDownloads值(10000)大于subD前numDownloads个值(500)。
我尝试使用sorted()函数和lambda表达式,但无法使其适用于我的情况。
for firstKey in myDict:
firstKeyData = myDict[firstKey]
for key in sorted(firstKeyData, key=lambda k: firstKeyData[k]["numDownloads"][0]):
// here, sub keys are sorted according to the first element of numDownloads
// A : subA then subB
// B : subD then subC
这是json文件的示例:
{
"Social":{
"Facebook":{
"Date":[
"2019-02-19"
],
"numDownloads":[
"100000000"
]
},
"Twitter":{
"Date":[
"2019-02-19"
],
"numDownloads":[
"100000"
]
}
},
"Instagram":{
"Date":[
"2019-02-19"
],
"numDownloads":[
"5000"
]
},
"Communication":{
"Messenger":{
"Date":[
"2019-02-19"
],
"numDownloads":[
"100000"
]
},
"Whatsapp":{
"Date":[
"2019-02-19"
],
"numDownloads":[
"50000000"
]
}
}
}
感谢所有人
答案 0 :(得分:2)
实际JSON文件的numDownloads
键包含字符串,而不是示例数据的简化版本所建议的整数,因此当您确定键的返回值时,比较是按字典顺序而不是数字方式进行的函数进行排序,因此,例如,"20"
被认为比"100"
“更大”。
您应该将引用的项目转换为整数:
for key in sorted(firstKeyData, key=lambda k: int(firstKeyData[k]["numDownloads"][0])):