Python 生成任意数量的if语句和字典索引

Python 生成任意数量的if语句和字典索引,python,python-3.x,dictionary,if-statement,redundancy,Python,Python 3.x,Dictionary,If Statement,Redundancy,我有个问题。如何执行多个if语句,同时也更改字典索引的数量?我想我的代码很好地总结了我想要发生的事情,但我会进一步解释。使用dict={“Hi”:{“Hello”:{“问候”:“再见”}}我希望一组if语句能够访问此词典中的每个点,而不必单独键入每个点。所以这一次, 如果级别==1: 打印(dict[“Hi”]) 如果级别==2: 打印(dict[“Hi”][“Hello”]) 如果级别==3: 打印(dict[“嗨”][“你好”][“问候语”]) 下面是一段代码示例: E={“C::{“D

我有个问题。如何执行多个if语句,同时也更改字典索引的数量?我想我的代码很好地总结了我想要发生的事情,但我会进一步解释。使用
dict={“Hi”:{“Hello”:{“问候”:“再见”}}
我希望一组if语句能够访问此词典中的每个点,而不必单独键入每个点。所以这一次,

如果级别==1:
打印(dict[“Hi”])
如果级别==2:
打印(dict[“Hi”][“Hello”])
如果级别==3:
打印(dict[“嗨”][“你好”][“问候语”])
下面是一段代码示例:

E={“C::{“Desktop.fld”:{“Hello.txt”:{“Content”:“Hello,World”}}
def PATH_APPEND(路径、项目、位置、内容):
如果len(位置)==1:
E[位置[0]]=项目
E[位置[0]][项目]=内容
如果len(位置)==2:
E[位置[0]][位置[1]]=项目
E[位置[0]][位置[1]][项目]=内容
如果len(位置)==3:
E[位置[0]][位置[1]][位置[2]][项目]=内容
# ... 等等
路径(E,“Hi.txt”,“C:,“Desktop.fld”],“Hi There,World”)
打印(E)
#{“C::{“Desktop.fld”:{…,“Hi.txt”:{“Content”:“Hi There,World”}}

我在运行示例时遇到一个错误,但我认为这很好地说明了问题。

以下是您更正的代码:

    E = {"C:":{"Desktop.fld":{"Hello.txt":{"Content":"Hello, World"}}}}


def PATH_APPEND(path, item, location, content):
    if len(location) == 1:
        E[location[0]][item] ={} 
        E[location[0]][item]=content 
    if len(location) == 2:
        E[location[0]][location[1]][item] ={} 
        E[location[0]][location[1]][item]=content 
    if len(location) == 3:
        E[location[0]][location[1]][location[2]][item]=content 
    # ... and so on

PATH_APPEND(E, "Hi.txt", ["C:","Desktop.fld"], "Hi There, World")
print(E)

出现错误,因为每个级别都必须是
dict()
,但您将其分配为字符串。

您不需要任何
语句。如果此任务使用
语句,您可以使用一个简单的
for
循环进入嵌套字典

from pprint import pprint

def path_append(path, item, location, content):
    for k in location:
        path = path[k]
    path[item] = {"Content": content}

# test

E = {"C:":{"Desktop.fld":{"Hello.txt":{"Content":"Hello, World"}}}}    
print('old')
pprint(E)

path_append(E, "Hi.txt", ["C:", "Desktop.fld"], "Hi There, World")
print('\nnew')
pprint(E)
输出

old
{'C:': {'Desktop.fld': {'Hello.txt': {'Content': 'Hello, World'}}}}

new
{'C:': {'Desktop.fld': {'Hello.txt': {'Content': 'Hello, World'},
                        'Hi.txt': {'Content': 'Hi There, World'}}}}

顺便说一句,您不应该使用
dict
作为变量名,因为这会隐藏内置的
dict
类型

此外,Python中的常规做法是对普通变量和函数名使用小写。所有大写字母用于常量,大写名称用于类。有关详细信息,请参阅


我还注意到,问题开头的代码块使用了
If
而不是正确的
If
语法,但这可能是伪代码。

我从来都不知道语法之外还有python语法,我会研究它。我听说过蛇案,但我认为这是个人喜好。另外,我想我确实忘记了使用if小写。不过谢谢,这很有效!