Geri döndürdüğü verilerde çok ayrıntılı bir API'nın birkaç uç noktasını tüketiyorum. Bu verilerin bir alt kümesini başka bir yerde başka bir kod parçasına vermek istiyorum. Birkaç (I döngü planlamak ve filtreyi) böyle sözlükleri verilen am varsayalımYeni bir sözlüğü yalnızca belirli öğelerle döndürmek için Python 3 iç içe geçmiş sözlüğü nasıl maskelenir?
:
asset = {
'id': 1,
'name': 'MY-PC',
'owner': 'me',
'location': 'New York City',
'model': {
'id': 1,
'name': 'Surface',
'manufacturer': {
'id': 1,
'name': 'Microsoft'
}
}
}
Ben bir "maske" ile birlikte, bu sözlüğü alacak bir işlev oluşturmak istediğiniz sadece izin verilen öğelerin yeni bir sözlüğünü oluşturmak için kullanılacaktır.
mask = {
'id': True,
'name': True,
'model': {
'id': True,
'name': True,
'manufacturer': {
'name': True
}
}
}
fonksiyonu o zaman bu dönmelidir:
mask = {
'id': 1,
'name': 'MY-PC',
'model': {
'id': 1,
'name': 'Surface',
'manufacturer': {
'name': 'Microsoft'
}
}
}
çoktan inşa şey var mı Bu örnek bir maske olabilir (gerçi ben çıkan kod en özlü ediyorsa onu biçimi ile çalışabilir) Buna yardımcı olacak Python 3'e mi? Bunu el ile yapmam gerekiyor gibi görünüyor, çok çirkin bir şekilde çabuk olacak. itertools.compress
'u buldum, ancak listelerde olduğu gibi görünüyor ve sözlüklerin karmaşıklığını ele almıyor.
def copy(asset, result, mask):
for key_name, value in mask.items():
if value == True:
result[key_name] = asset[key_name]
else:
result[key_name] = x = {}
copy(asset[key_name], x, value)
y = {}
copy(asset, y, mask)
['jq (1)'] (https://stedolan.github.io/jq/) 'yi duydunuz mu? – o11c
Maske tuşları eşleşen veri anahtarına sahip olmadığında ne olur? –