如何使用dict理解来分割列表?

时间:2017-06-26 11:35:33

标签: python python-3.x

我目前在表格中有一个词典:

data = {"var1":"600103", "var2":[{"a":"1","b":"2"}]}

我希望输出为:

op = {"var1":"600103","var2[0]":{"a":"1","b":"2"}}

我目前正在使用循环来手动循环。我想知道是否有更多的pythonic方式。

2 个答案:

答案 0 :(得分:1)

如果这不是你正在做的事情,你可以通过对列表值使用dict理解来消除对嵌套循环的需要。

data = {"var1":"600103", "var2":[{"a":"1","b":"2"}, {"a":"22","b":"555"}]}

op = {}
for k in data:
    if not isinstance(data[k], list): 
        op[k] = data[k]
    else:
        op.update({k + '[{}]'.format(i) : data[k][i] for i in range(len(data[k])) })

而且,您的输出将如下所示:

{'var1': '600103', 'var2[1]': {'a': '22', 'b': '555'}, 'var2[0]': {'a': '1', 'b': '2'}}

答案 1 :(得分:1)

我不知道它是否是非常pythonic,但我确信它很难读:S 对不起,只是在玩...;)

data = {"var1":"600103", "var2":[{"a":"1","b":"2"},{"a":"3","b":"4"},{"a":"5","b":"6"},{"a":"7","b":"8"}], "var3":"600103"}
reduce(
    lambda a, b: dict(a.items() + b.items()),
    [
        dict(map(lambda (idx, i): ('{0}[{1}]'.format(key, idx), i), enumerate(value))) if type(value) is list else {key: value} 
        for key, value 
        in data.items()
    ]
)

输出:

{'var1': '600103',
 'var2[0]': {'a': '1', 'b': '2'},
 'var2[1]': {'a': '3', 'b': '4'},
 'var2[2]': {'a': '5', 'b': '6'},
 'var2[3]': {'a': '7', 'b': '8'},
 'var3': '600103'}