我有一个QTreeView,它以以下格式填充,并且允许用户选择:
|--- allCars
|---|--- carA
|---|---|--- fiat
|---|--- carB
|---|---|--- fiat
我有一个嵌套的字典,如下所示:
car_dict = {
'|carA': {
'|carA|fiat': {
'|carA|fiat|info': {
'behaviour': {
'model': 'Panda',
'manufactured_date': '',
'vendors': {
'company': {
'usa': 'abc_company'
}
}
},
'projected': 200
}
}
},
'|carB': {
'|carB|fiat': {
'|carB|fiat|info': {
'behaviour': {
'model': 'Punto',
'manufactured_date': '',
'vendors': {
'company': {
'usa': 'abc_company',
'russia': 'cde_company'
}
}
},
'projected': 450
}
}
}
}
我正在尝试从此嵌套字典中导出company
值。代码如下:
def derive_dict_recursively(search_dict, field):
fields_found = []
for key, value in search_dict.iteritems():
if key == field:
fields_found.append(value)
elif isinstance(value, dict):
results = derive_dict_recursively(value, field)
for result in results:
fields_found.append(result)
elif isinstance(value, list):
for item in value:
if isinstance(item, dict):
more_results = derive_dict_recursively(item, field)
for another_result in more_results:
fields_found.append(another_result)
return fields_found
my_sel1 = "|carA"
filtered_dict1 = {k:v for k,v in car_dict.iteritems() if my_sel1 in k}
output1 = derive_dict_recursively(filtered_dict1, "company")
# Returns : [{'usa': 'abc_company'}]
my_sel2 = "|carA|fiat"
filtered_dict2 = {k:v for k,v in car_dict.iteritems() if my_sel2 in k}
output1 = derive_dict_recursively(filtered_dict2, "company")
# Returns : []
但是,如果用户选择|carA|fiat
如果我尝试仅选择|carA|fiat
或|carA|fiat|info
进行迭代,它将返回一个空列表。
不管我选择的层次结构的“级别”如何,我都可以迭代字典并仍然获取company
值的最佳方法是什么?