Python使用列表推导创建多维字典

时间:2018-02-14 09:01:16

标签: python dictionary list-comprehension valueerror

我有以下格式的字典:

   dictionary = {'key' : ('value', row_number, col_number)}

我希望将字典转换为以下格式:

   converted_dict = {'key' : {'row':row_number, 'col':col_number}}

使用以下代码我收到以下错误

   dict_list = [(key, dict([('row',value[1]), ('column',value[2])])) for 
                                               key, value in cleaned_dict]
   converted_dict = dict(dict_list)       



   ValueError: too many values to unpack (expected 2)

4 个答案:

答案 0 :(得分:2)

我不太明白为什么你试图将字典转换成列表时你想要的实际上是字典。看来你不明白怎么做dict理解。试试这种方法:

converted_dict = {
   key: {'row': value[1], 'column': value[2]} for key, value in cleaned_dict.items()
}

另请注意,如果要迭代字典中的键和值,则应调用dictionary.items()(如上面的代码所示)

答案 1 :(得分:2)

你可以使用词典理解:

dictionary = {'key' : ('value', 'row_number', 'col_number')}
>>> {k: {'row': row, 'col': col} for k, (_, row, col) in dictionary.items()}
{'key': {'row': 'row_number', 'col': 'col_number'}}

答案 2 :(得分:0)

通过字典迭代只返回nd,无需额外的步骤将列表转换为字典。关键,

所以这里我们需要一对键和值,所以我们需要使用dict.items

In [6]: lst = {'a':(0,1),'b':(2,1)}

In [7]: converted_dict = dict((key, dict([('row',value[0]), ('column',value[1])])) for key, value in lst.items())
Out[7]: {'a': {'column': 1, 'row': 0}, 'b': {'column': 1, 'row': 2}}

答案 3 :(得分:0)

......还有另一个 dict-comprehension

converted_dict = {k : dict(zip(('row', 'column'), v[1:])) for k, v in dictionary.items()}

用于:

dictionary = {'a' : ('value', 1, 2), 'b' : ('value', 0, 0)}

返回:

{'a': {'row': 1, 'column': 2}, 'b': {'row': 0, 'column': 0}}

错误的代码唯一缺少.items() 1 。它必须是:

dict_list = [... for key, value in cleaned_dict.items()]

1。如果您使用的是Python 2,则需要.iteritems()