8 ответов:
использовать
dict.pop():my_dict.pop('key', None)возвращает
my_dict[key]Еслиkeyсуществует в словаре, иNoneв противном случае. Если второй параметр не указан (т. е.my_dict.pop('key')) иkeyне существует, aKeyErrorподнимается.
в частности, чтобы ответить: "есть ли один способ сделать это?"
if 'key' in myDict: del myDict['key']...ну, ты попросил ; -)
вы должны учитывать, что этот способ удаления объекта из
dictи не атомные-вполне возможно, что'key'может бытьmyDictво времяifзаявление, но может быть удалено доdelвыполняется, в этом случаеdelне будетKeyError. Учитывая это, было бы безопаснее всего либо использоватьdict.popили что-то вродеtry: del myDict['key'] except KeyError: passчто, конечно, определенно не один вкладыш.
Мне потребовалось некоторое время, чтобы выяснить, что именно
my_dict.pop("key", None)делает. Поэтому я добавлю это в качестве ответа, чтобы сэкономить другим время поиска:pop (клавиша [, по умолчанию])
если ключ находится в словаре, удалите его и верните его значение, иначе возврат по умолчанию. Если значение по умолчанию не задано и ключ не находится в словарь, KeyError поднимается
выбор времени для трех решений, описанных выше.
маленький словарик:
>>> import timeit >>> timeit.timeit("d={'a':1}; d.pop('a')") 0.23399464370632472 >>> timeit.timeit("d={'a':1}; del d['a']") 0.15225347193388927 >>> timeit.timeit("d={'a':1}; d2 = {key: val for key, val in d.items() if key != 'a'}") 0.5365207354998063больший словарь:
>>> timeit.timeit("d={nr: nr for nr in range(100)}; d.pop(3)") 5.478138627299643 >>> timeit.timeit("d={nr: nr for nr in range(100)}; del d[3]") 5.362219126590048 >>> timeit.timeit("d={nr: nr for nr in range(100)}; d2 = {key: val for key, val in d.items() if key != 3}") 13.93129749387532
Если вам нужно удалить много ключей из словаря в одной строке кода, я думаю, что использование map () довольно лаконично и легко читается:
myDict = {'a':1,'b':2,'c':3,'d':4} map(myDict.pop, ['a','c']) # The list of keys to remove >>> myDict {'b': 2, 'd': 4}и если вам нужно поймать ошибки, где вы поп значение, которое не находится в словаре, используйте лямбда внутри map () следующим образом:
map(lambda x: myDict.pop(x,None), ['a','c','e']) [1, 3, None] # pop returns >>> myDict {'b': 2, 'd': 4}это работает. И 'e 'не вызывал ошибки, хотя у myDict не было ключа' e'.
использование:
>>> if myDict.get(key): myDict.pop(key)иначе:
>>> {k:v for k, v in myDict.items() if k != 'key'}вы можете удалить условиями. Нет ошибки, если
keyне существует.
мы можем удалить ключ из словаря Python с помощью следующих подходов.
С помощью
delключевое слово; это почти такой же подход, как вы сделали, хотя -myDict = {'one': 100, 'two': 200, 'three': 300 } print(myDict) # {'one': 100, 'two': 200, 'three': 300} if myDict.get('one') : del myDict['one'] print(myDict) # {'two': 200, 'three': 300}или
мы можем сделать следующее:
но следует иметь в виду, что в этом процессе на самом деле это не удалить любой ключ из словаря, а не делать конкретные ключ исключено от словарь. Кроме того, я заметил, что он вернул словарь, который не был заказан так же, как
myDict.myDict = {'one': 100, 'two': 200, 'three': 300, 'four': 400, 'five': 500} {key:value for key, value in myDict.items() if key != 'one'}если мы запустим его в оболочке, он будет выполнять что-то вроде
{'five': 500, 'four': 400, 'three': 300, 'two': 200}- обратите внимание, что это не то же самое, что иmyDict. Опять же, если мы попытаемся напечататьmyDict, то мы можем видеть все ключи, включая которые мы исключили из словаря с помощью этого подхода. Однако мы можем создать новый словарь, назначив следующий оператор в a переменная:var = {key:value for key, value in myDict.items() if key != 'one'}теперь, если мы попытаемся распечатать его, то он будет следовать родительскому порядку:
print(var) # {'two': 200, 'three': 300, 'four': 400, 'five': 500}или
С помощью
pop()метод.myDict = {'one': 100, 'two': 200, 'three': 300} print(myDict) if myDict.get('one') : myDict.pop('one') print(myDict) # {'two': 200, 'three': 300}разницу между
delиpopэто, что, используяpop()метод, мы можем на самом деле хранить ключи при необходимости, например:myDict = {'one': 100, 'two': 200, 'three': 300} if myDict.get('one') : var = myDict.pop('one') print(myDict) # {'two': 200, 'three': 300} print(var) # 100
Comments