如何遍历列表并填充嵌套字典Python?

时间:2017-12-11 21:42:09

标签: python python-3.x dictionary

我正在尝试创建嵌套字典,并希望使用从命令行传递给我的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'}

3 个答案:

答案 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'}}}}}