簡體   English   中英

在Python中按排序順序打印嵌套字典的鍵

[英]Print Keys of nested dictionaries in sorted order in Python

我目前正在學習一些 Python。 我面臨的首要任務之一是按排序順序打印字典的鍵及其可能的嵌套字典。

任務定義是:

編寫一個程序以按排序順序顯示“字典字典”(嵌套字典)的所有鍵

所以我有類似的東西

vDict={1:2942, 5:{20:231, 49:359, 65:429}, 39:{9359:2932, 9298:29328, 124:4}}

並且需要按排序順序打印其所有鍵。 理論上,我不知道模塊,所以我只能使用內置函數

在我看來,我能想到的唯一方法是使用vDict.keys()函數的輸出並用正則表達式拆分以對值進行排序。 但是后來我不知道如何遍歷第 2 層字典。

我很確定這不是我應該在這里做的事情,有一種更簡單的方法。 我很想看看受過教育的人是如何處理這個問題的。

這是在平靜的工作時間自學,所以你沒有在這里做我的作業;)

單線方法

>>> sorted([k for v in vDict.values() if isinstance(v, dict) for k in v] + list(vDict))
[1, 5, 20, 39, 49, 65, 124, 9298, 9359]

拆分出來的,可讀性更強的版本

>>> def iterate_keys(d):
...     for k, v in d.items():
...         yield k
...         if isinstance(v, dict):
...             yield from v
...
>>> sorted(iterate_keys(vDict))
[1, 5, 20, 39, 49, 65, 124, 9298, 9359]

如果您想處理具有更深嵌套的字典,您可以將yield from v line 更改為yield from iterate_keys(v)以訪問所有級別的嵌套。

這應該這樣做:

def process(dd, keys):

    for key, val in dd.items():
        keys.append(key)
        if isinstance(val,dict):
            process(val, keys)

    return keys


vDict={1:2942, 5:{20:231, 49:359, 65:429}, 39:{9359:2932, 9298:29328, 124:4}}

keys=[]
process(vDict, keys)
print(sorted(keys))

我認為這就是你要找的:

vDict={1:2942, 5:{20:231, 49:359, 65:429}, 39:{9359:2932, 9298:29328, 124:4}}
def get_keys(vDict):
    keys_list = []

    for k in vDict.keys():
        keys_list.append(k)
        if(type(vDict[k]) is dict):
            keys_list = keys_list + get_keys(vDict[k])
    return keys_list
new_list = get_keys(vDict)
new_list.sort()

輸出:

[1, 5, 20, 39, 49, 65, 124, 9298, 9359]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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