Словарь Python: удалить все ключи, начинающиеся с s - PullRequest
12 голосов
/ 11 января 2011

У меня есть словарь, как

dic = {'s_good': 23, 's_bad': 39, 'good_s': 34}

Я хочу удалить все ключи, начинающиеся с 's _'

Таким образом, в этом случае первые два будут удалены.

Есть ли эффективный способ сделать это?

Ответы [ 5 ]

22 голосов
/ 11 января 2011

Это должно сделать это:

for k in dic.keys():
  if k.startswith('s_'):
    dic.pop(k)
18 голосов
/ 11 января 2011
for k in dic.keys():
    if k.startswith('s_'):
        del dic[k]
7 голосов
/ 18 мая 2017

С питоном 3, чтобы избежать ошибки:

RuntimeError: dictionary changed size during iteration 

Это должно сделать это:

list_keys = list(dic.keys())
for k in list_keys:
  if k.startswith('s_'):
    dic.pop(k)
5 голосов
/ 11 января 2011

Как насчет этого:

dic = dict( [(x,y) for x,y in dic.items() if not x.startswith('s_')] )
3 голосов
/ 11 января 2011

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

{k: v for k, v in dic.items() if not k.startswith("s_")}

Этот аналогичный синтаксис в Python 2 делает то же самое:

dict((k, v) for k, v in dic.items() if not k.startswith("s_"))

Обратите внимание, что оба они создают новый словарь(который вы можете назначить обратно dic, если хотите), а не изменять существующий словарь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...