簡體   English   中英

遍歷python中的排序嵌套字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM