[英]How to iterate through list and populated nested dictionary Python?
我正在尝试创建一个嵌套的字典,并希望使用从命令行传递到我的Python脚本的参数填充它。 我希望命令行中的每个条目都是字典中的键,并且字典将以最后一个命令行参数的值终止。 字典中的“根”键将是传递给命令行的第二个参数(在索引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'}
我会通过递归来做到这一点。 一个简单的例子是:
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)
此功能适用于递归解决方案。 从第一个到最后一个处理参数,并在每个步骤将当前参数映射到函数本身的结果。 您必须执行此操作,直到找到最后一个元素,然后您只需返回即可。
您正在将字典分配给它本身,因此是生成的{...}
语法。 您可以尝试以下方法:
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'}}}}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.