【问题标题】:Python create multi-dimensional dictionary using list comprehensionsPython使用列表推导创建多维字典
【发布时间】:2018-07-24 18:56:25
【问题描述】:

我有以下格式的字典:

   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)

【问题讨论】:

    标签: python dictionary list-comprehension valueerror


    【解决方案1】:

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

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

    另外请注意,如果您想遍历字典中的键和值,您应该调用dictionary.items()(如上面的代码)

    【讨论】:

    • 谢谢,这对我很有帮助。
    【解决方案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'}}
    

    【讨论】:

      【解决方案3】:

      遍历字典只返回不需要额外的步骤将列表转换为字典。键,

      所以这里我们需要一对键和值所以我们需要使用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}}
      

      【讨论】:

        【解决方案4】:

        ...还有另一个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<b>.items()</b>]

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

        【讨论】:

          猜你喜欢
          • 2021-05-01
          • 2016-02-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-08
          • 2014-01-28
          • 2021-07-28
          相关资源
          最近更新 更多