Python создает многомерный словарь, используя списки

У меня есть словарь в следующем формате:

   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 ответа

Решение

Я не совсем понимаю, почему вы пытаетесь преобразовать словарь в список, когда то, что вы хотите, на самом деле диктует. Кажется, вы не понимаете, как сделать диктат понимания. Попробуйте этот подход:

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

Также обратите внимание, что если вы хотите перебрать и ключи, и значения в словаре, вы должны вызвать dictionary.items() (как в коде выше)

Вы можете использовать словарь понимания:

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

Итерация только по словарю возвращает и не требует дополнительных шагов для преобразования списка в словарь. ключ,

Итак, здесь нам нужна пара ключей и значений, поэтому нам нужно использовать 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}}

... и еще одно понимание.

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

который для:

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

дает:

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

Единственный недостаток вашего кода в том, что в нем отсутствует .items() 1 Это должно было быть:

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

1. Если вы используете Python 2 вам нужно .iteritems() вместо.

Другие вопросы по тегам