Удалить ключ и значение из OrderedDict

Я пытаюсь удалить ключ и значение из OrderedDict, но когда я использую:

dictionary.popitem(key)

он удаляет последний ключ и значение, даже если указан другой ключ. Можно ли убрать ключ посередине если словарь?


person Acoop    schedule 26.11.2014    source источник
comment
Прочтите документацию для OrderedDict.popitem: The пары возвращаются в порядке ЛИФО, если last верно, или в порядке ФИФО, если нет.   -  person jonrsharpe    schedule 26.11.2014
comment
dictioary.popitem() не принимает аргумент, используйте dictionary.pop(key).   -  person martineau    schedule 26.11.2014
comment
@martineau, вы также должны перейти по этой ссылке - .popitem действительно принимает аргумент, last, иначе OP получит TypeError, а не неожиданное поведение   -  person jonrsharpe    schedule 26.11.2014
comment
@jonrsharpe: Правда, OrderedDict.popitem() действительно принимает необязательный аргумент, но это не ключ в словаре, поэтому OP должен использовать унаследованный dict.pop(key), особенно если они хотят, чтобы в результате возвращалось связанное значение удаляемого ключа.   -  person martineau    schedule 26.11.2014
comment
Возможный дубликат Удалить элемент из словаря   -  person slm    schedule 27.07.2017


Ответы (2)


Да, вы можете использовать del:

del dct[key]

Ниже представлена ​​демонстрация:

>>> from collections import OrderedDict
>>> dct = OrderedDict()
>>> dct['a'] = 1
>>> dct['b'] = 2
>>> dct['c'] = 3
>>> dct
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
>>> del dct['b']
>>> dct
OrderedDict([('a', 1), ('c', 3)])
>>>

Фактически, вы всегда должны использовать del для удаления элемента из словаря. dict.pop и dict.popitem используются для удаления элемента и возврата удаленного элемента, чтобы его можно было сохранить на потом. Однако если вам не нужно его сохранять, то использование этих методов менее эффективно.

person Community    schedule 26.11.2014

Вы можете использовать pop, popitem по умолчанию удаляет последний:

d = OrderedDict([(1,2),(3,4)])
d.pop(your_key)
person Padraic Cunningham    schedule 26.11.2014