как изменить длину словаря

#python #python-3.x #dictionary

#python #python-3.x #словарь

Вопрос:

у меня есть два словаря, но разной длины. я хочу сделать длину большего словаря такой же, как у маленького. я использую это, но это выдает ошибку, я думаю, потому что я не могу сделать это с таким словарем. это выдает мне эту ошибку: TypeError: нехешируемый тип: ‘slice’

 if len(ints2answers) > len(ints2questions):
    ints2answers = ints2answers[:len(ints2questions)]
elif len(ints2questions) > len(ints2answers):
    ints2questions = ints2questions[:len(ints2answers)]
  

Комментарии:

1. Вы можете уменьшить размер второго словаря, удалив некоторые элементы. Но знаете ли вы, какие элементы удалять?

2. ДА. я хочу удалить элементы из последнего индекса меньшего словаря до конца, поскольку они отсортированы.

3. Они отсортированы? Означает ли это, что они OrderedDict s ?

4. Еще раз, словари не отсортированы. Пожалуйста, добавьте примеры ваших словарей.

5. Это звучит плохо. Еще раз, пожалуйста, покажите нам ваши словари.

Ответ №1:

Как уже указывалось, структура данных словаря не обеспечивает нарезку. Но вы можете вырезать items из словаря и преобразовать его обратно в словарь.

 >>> d = {0:0, 1:1, 2:2, 3:3}
>>> max_len = 2
>>> dict(list(d.items())[:max_len])
{0: 0, 1: 1}
  

Ответ №2:

Вы получаете ошибку типа, которая означает, что вы выполняете неподдерживаемую операцию для словарей.

Словари представляют собой неупорядоченные списки. Это означает, что у них нет порядка. Вы не можете сказать, какой объект является первым объектом словаря, вместо этого это набор keys и values .Но нарезка ( ints2answers[:len(ints2questions)] ) может быть выполнена только с упорядоченным списком (т.е. lists , tuples , strings ).

Если вы хотите выполнить описанную выше операцию со своими данными, вы должны сделать это 2D-списком. Это можно сделать очень легко с помощью следующего кода (или вы можете найти свой собственный способ)

myList = [ [k,v] for k, v in myDict.items() ]

Теперь вы можете нарезать свой список и выполнить описанную выше операцию. Если вам нужно снова сделать его словарем, dict(myList) выполнит эту работу.