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