[英]unflatten a python dictionary in an efficient way
假設你有一個這樣的字典列表:
{'id':1,
'station': 'LYO',
'country': 'France',
'classes': 'EU',
'label': 'LYO CS',
'color': 'orange',
'population':100000,
'university':yes}
我想創建:
{'data':{'id':1,
'station': 'LYO',
'country': 'France'},
'classes': 'EU',
'label': 'LYO CS',
'color': 'orange',
'population':100000,
'university':yes}
基本上在數據子字典中包含 data_items= ['id','station','country'] 的鍵值
明顯的很長的路要走是:
data_keys = ['id','station']
data_sub_dict = {'data':{el:node[el] for el in data_keys}}
rest_sub_dict = {el:node[el] for el in node.keys() if el not in data_keys}
dict_result ={}
dict_result.update(data_sub_dict)
dict_result.update(rest_sub_dict)
這沒關系,但對我來說它聞起來不是很蟒蛇。
否則你會這樣做嗎? (更緊湊?,其他方法嗎?)
謝謝
為什么要update
s?
可以使用dict
構造函數在一條指令中編寫所有內容:
data = {'id':1,
'station': 'LYO',
'country': 'France',
'classes': 'EU',
'label': 'LYO CS',
'color': 'orange',
'population':100000,
'university':'yes'}
dict(
{'data': {k:v for k,v in data.items() if k in ('id', 'station','country')}},
**{k:v for k,v in data.items() if k in ('classes', 'color', 'population', 'university')})
結果:
{'data': {'id': 1, 'station': 'LYO', 'country': 'France'},
'classes': 'EU',
'color': 'orange',
'population': 100000,
'university': 'yes'}
我建議編寫一個 function 將字典分成兩部分,同時提供一個鍵列表:
def filterByKeys(d,keys):
a={}; b={};
for k in d:
if k in keys: a[k] = d[k]
else : b[k] = d[k]
return (a,b)
d1, d2 = filterByKeys(d,['id','station'])
{'data':d1,**d2}
雖然這種方法不使用列表推導來迭代字典,但它變得非常容易理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.