再帰的な辞書を得るために、あなたは次のように使用します
class RecursiveDict(dict):
def __missing__(self, attr):
db = RecursiveDict()
super(RecursiveDict, self).__setitem__(attr, db)
return db
def __setitem__(self, attr, value):
if isinstance(attr, (tuple,list)):
cur = self[attr[0]]
for i in attr[1:-1]:
cur = cur[i]
cur[attr[-1]] = value
else:
super(RecursiveDict, self).__setitem__(attr, value)
def __getitem__(self, item):
if isinstance(item, (tuple, list)):
cur = self[item[0]]
for i in item[1:]:
cur = cur[i]
return cur
else:
return super(RecursiveDict, self).__getitem__(item)
def __delitem__(self, item):
if isinstance(item, (tuple, list)):
cur = self[item[0]]
for i in item[1:-1]:
cur = cur[i]
del cur[item[-1]]
else:
return super(RecursiveDict, self).__delitem__(item)
このヘルパークラスを使用することができます。
a=RecursiveDict()
path="https://stackoverflow.com/a/a/a"
path = path.strip("/").split("/")
a[path]="value"
a["a","b","c"]=1
a["b"]=2
print a
- >{'a': {'a': {'a': 'value'}, 'b': {'c': 1}}, 'b': 2}
これは学校の割り当てのように思えます。これまでに試したことを分かち合うことができますか? –
私はそれが好きだと思うが、それは私が問題を提示したやり方だと思う。現実は、私はこの挑戦をカバーするSOに関する質問を見ることができなかったので、追加する価値があると考えられました。 – GMeister
あなたがしなければならないことは、再帰を使うこと/カスタムクラスを実装することです。 – muddyfish