我正在尝试创建嵌套字典,并希望使用从命令行传递给我的Python脚本的参数来填充它。我希望命令行中的每个条目都是字典中的键,字典将以最后一个命令行参数的值终止。字典中的“root”键将是传递给命令行的第二个参数(在索引0中,根键将是sys.argv [1])。我正在寻找这样的东西:
./script.py arg1 arg2 arg3 arg4 arg5
产生字典:
{arg1: {arg2: {arg3: {arg4: arg5}}}}
这是我到目前为止所拥有的:
parameter = {}
parameter[sys.argv[-2]] = sys.argv[-1]
for i in reversed(sys.argv[1:-2]):
print(parameter)
parameter[i] = parameter
导致输出:
{'arg2': {...}, 'arg1': {...}, 'arg3': {...}, 'arg4': 'arg5'}
答案 0 :(得分:3)
我会用递归来做这件事。一个简单的例子是:
import sys
def create_dict(items):
if len(items) == 1:
return items[0]
else:
return {items[0]: create_dict(items[1:])}
if __name__ == '__main__':
result = create_dict(sys.argv[1:])
print(result)
答案 1 :(得分:1)
此功能适用于递归解决方案。处理从第一个到最后一个的参数,并在每个步骤将当前参数映射到函数本身的结果。你这样做,直到你到达最后一个元素,你只需返回。
答案 2 :(得分:1)
您正在为自己分配字典,从而生成{...}
语法。你可以试试这个:
import sys
args = sys.argv[1:]
d = {}
def place(l, last):
if not l[1:]:
return {l[0]:last}
else:
return place(l[1:], {l[0]:last})
print(place(args[::-1], args[-1]))
输出:
{'arg1': {'arg2': {'arg3': {'arg4': {'arg5': 'arg5'}}}}}