在python中遍历已排序的嵌套字典

2024-10-01 15:49:17 发布

您现在位置: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]}
    }
}

我想迭代第二级键(subA,subB代表A和subC,subD代表B)上的每个第一级键(在本例中是A和B),按numDownloads升序的第一个值排序(int1,int3代表A和int5,int7代表B)。你知道吗

如果我举一个我想要的例子: 考虑一下这个措辞:

{"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 first numDownloads值(100)低于subB first numDownloads值(500),尽管B与subD然后subC和subC first numDownloads值(10000)大于subD first 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"
         ]
      }
   }
}

谢谢大家


Tags: date字典排序代表firstsorteddate1int1
1条回答
网友
1楼 · 发布于 2024-10-01 15:49:17

实际JSON文件的numDownloads键包含字符串,而不是示例数据的简化版本所建议的整数,因此,当您使用键函数的返回值进行排序时,比较是按字典顺序进行的,而不是按数字进行的,因此"20"会被认为比"100"更大。你知道吗

您应该将引用的项转换为整数:

for key in sorted(firstKeyData, key=lambda k: int(firstKeyData[k]["numDownloads"][0])):

相关问题 更多 >

    热门问题