簡體   English   中英

在字典中打印特定的鍵子集

[英]Printing a particular subset of keys in a dictionary

我在Python中有一個字典,鍵是路徑名。 例如:

dict["/A"] = 0
dict["/A/B"] = 1
dict["/A/C"] = 1

dict["/X"] = 10
dict["/X/Y"] = 11

我想知道,給出任何關鍵字打印所有“子路徑”的好方法是什么。

例如,給定一個名為“print_dict_path”的函數來執行此操作,類似於

print_dict_path("/A")

要么

print_dict_path("/A/B")

會打印出類似的東西:

"B" = 1
"C" = 1

我能想到的唯一方法就是使用正則表達式並瀏覽整個字典,但我不確定這是否是最好的方法(我也不熟悉正則表達式)。

謝謝你的幫助。

不使用正則表達式的一種可能性是只使用startswith

top_path = '/A/B'
for p in d.iterkeys():
    if p.startswith(top_path):
        print d[p]

你可以使用str.find:

def print_dict_path(prefix, d):
    for k in d:
        if k.find(prefix) == 0:
            print "\"{0}\" = {1}".format(k,d[k])

好吧,你肯定要遍歷整個字典。

def filter_dict_path( d, sub ):
    for key, val in d.iteritems():
        if key.startswith(sub): ## or do you want `sub in key` ?
            yield key, val

print dict(filter_dict_path( old_dict, sub ))

您可以通過使用適當的數據結構來加快速度:樹。

你的字典結構是固定的嗎? 使用嵌套字典這樣做會更好:

{
    "A": {
        "value": 0
        "dirs": {
            "B": {
                "value": 1
            }
            "C": {
                "value": 1
            }
        }
    "X": {
        "value": 10
        "dirs": {
            "Y": {
                "value": 11
            }
}

這里的底層數據結構是一棵樹,但Python沒有內置的。

這會刪除一個級別的縮進,這可能會使for循環體中的代碼在某些情況下更具可讀性

top_path = '/A/B'
for p in (p for p in d.iterkeys() if p.startswith(top_path)):
    print d[p]

如果您發現性能有問題,請考慮使用trie而不是字典

暫無
暫無

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

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