[英]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.