[英]Iterate through a sorted nested dictionary in python
我在遍历已排序的嵌套字典时遇到了麻烦。 嵌套字典是指包含其他字典的字典,例如:
{"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]}
}
}
我想对按numDownloads的第一个值升序排序的第二级键(subA,subB(A和subC,subD,B))上的每个第一级键(在这种情况下为A和B)进行迭代3代表A,int 5代表B 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"
]
}
}
}
谢谢大家
实际JSON文件的numDownloads
键包含字符串,而不是示例数据的简化版本所建议的整数,因此当您确定键函数的返回值进行排序时,比较是按字典顺序而不是数字进行,因此"20"
因此,例如, "20"
将被视为“大于” "100"
。
您应该将引用的项目转换为整数:
for key in sorted(firstKeyData, key=lambda k: int(firstKeyData[k]["numDownloads"][0])):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.