[英]Conversing Multilevel Dictionary in Python
所以,我正在嘗試制作一個程序,其中我有一個如下所示的字典。 問題是,用戶應該能夠將一個值添加到一個預先存在的字典中——字符串或另一個字典。 我不認為我會遇到那么多麻煩,除非我希望更多的詞典能夠作為對學生的一種價值,然后將更多的詞典添加到其中制作的詞典中,等等。所以基本上我贏了我不知道要添加多少詞典以及這條線到底有多遠,所以我不認為我可以硬編碼來添加它?
對不起,如果我沒有多大意義,但這個想法基本上是用戶將從城市開始並被提示添加城市。 從那里,他們可以“進入”城市並添加一所學校,或者添加一個額外的城市等等。 只是在如何實現這個問題上苦苦掙扎,我不想使用任何類型的導入。
我是 Python 的新手,如果這看起來真的很愚蠢,我很抱歉。
cities = {
"city_1": {
"school_1": {
"class_1":{
"student_1": {
"name": "Joe"
},
"student_2": {
"name": "Tim"
}
}
},
"school_2": {
"class_1": {
"student_1": {
"name": "Joe"
},
"student_2": {
"name": "Tim"
}
}
}
},
"city_2": {
"school_1": {
"class_1": {
"student_1": {
"name": "Sarah"
},
"student_2": {
"name": "Jake"
}
},
"class_1": {
"student_1": {
"name": "Sarah"
},
"student_2": {
"name": "Jake"
}
}
}
}
}
如果我理解正確,你需要一些方法來處理嵌套字典來執行基本操作。 這不是一項簡單的任務,因為您需要編寫邏輯來設置、獲取、刪除和迭代項目。
您可以從Best way to get nested dictionary items開始,但這是獲取項目的方法:
def getitem(d, key):
for level in key:
d = d[level]
return d
>>> d = {"a": {"b": {"c": 0}}}
>>> getitem(d, ("a", "b"))
{"c": 0}
>>> getitem(d, ("a", "b", "c"))
0
如何設置項目:
def setitem(d, key, value):
if not isinstance(key, tuple):
key = (key,)
item = d
for k in key[:-1]:
item = item.setdefault(k, {})
item[key[-1]] = value
>>> setitem(d, "b", 2)
>>> d
{'a': {'b': {'c': 0}}, 'b': 2}
>>> setitem(d ("a", "b"), 1)
>>> d
{'a': {'b': 1}, 'b': 2}
如果您想要我提到的其他方法的實現,請查看NestedDict
ndicts 中的 NestedDict ndicts
(我是作者)。 我從collections.abc MutableMapping
class 開始,導入它並定義我的__getitem__
、 __setitem__
、 __delitem__
、 __iter__
、 __len__
方法的邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.