2017-01-28 3 views
0

Предположим, у меня есть словарь со следующими ключами: значенияКак удалить определенные символы из словаря в python?

{A1:2345, A2:23, A3:1} 

Я просто хочу, чтобы удалить «23» от A1 и ожидается выход будет

{A1:45, A2:23, A3:1} 

Пожалуйста, советы

+0

Какой тип элементов? Строки? –

+0

Кроме того, что произойдет, если '23' произойдет дважды, например' 23452345'' ... –

+0

Да это строки –

ответ

1

Так как Based на ваши комментарии, 23 произойдет только один раз, вы можете вызвать re.sub на строку и записать ее обратно в словарь. Так что, если словарь называется dic:

import re 

dic['A1'] = re.sub('23','',dic['A1'],1) 

,1 не является обязательным, и говорит, что вы только заменить первое вхождение (но это может повысить эффективность крошечный). Например:

$ python3 
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> dic={'A1':'2345', 'A2':'23', 'A3':'1'} 
>>> import re 
>>> dic['A1'] = re.sub('23','',dic['A1'],1) 
>>> dic 
{'A2': '23', 'A3': '1', 'A1': '45'} 

EDIT:

на основе ваших комментариев, вы хотите удалить 2 с и 3 с от значений всех элементов, за исключением 'A9'. Вы можете достичь этого с for цикла:

import re 

for key,val in dic.items(): 
    if key != 'A9': 
     dic[key] = re.sub('2|3','',val) 

Труба (|) в функциях регулярных выражений как «или». Итак:

$ python3 
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> dic={'A1':'5', 'A2':'1', 'A3': '2379', 'A4':'8', 'A5':'37', 'A6':'379', 'A7':'6', 'A8':'4', 'A9':'23'} 
>>> import re 
>>> 
>>> for key,val in dic.items(): 
...  if key != 'A9': 
...   dic[key] = re.sub('2|3','',val) 
... 
>>> dic 
{'A3': '79', 'A2': '1', 'A4': '8', 'A6': '79', 'A1': '5', 'A8': '4', 'A5': '7', 'A9': '23', 'A7': '6'} 
+0

Спасибо за ваш ответ. Есть ли способ, по которому я могу перебирать весь словарь, например {A1: 5, A2: 1, A3: 2379, A4: 8, A5: 37, A6: 379, A7: 6, A8: 4, A9: 23} и ожидаем, что выход будет похож на {A1: 5, A2: 1, A3: 79, A4: 8, A5: 7, A6: 79, A7: 6, A8: 4, A9: 23} –

+0

@KinshukSrivastava: значение для 'A9' в вашем примере не изменяется ... Это ошибка? –

+0

Нет, Вилем, это не ошибка. Я знаю, что у A9 есть 23, и я хочу удалить все вхождения 2 и 3 из словаря, оставляющего A9. –

1

Я просто хочу, чтобы удалить «23» от А1 .... Это не произойдет 23 будет не происходит дважды

В вашем простом случае, было бы достаточно чтобы использовать функцию: repr()

d = {'A1':2345, 'A2':23,'A3':1} 
d['A1'] = int(repr(d['A1'])[2:]) # getting slice of characters starting from index 2 

print(d) 

выход:

{'A1': 45, 'A3': 1, 'A2': 23} 

Если все значения являются строками, речь идет еще проще:

d['A1'] = d['A1'][2:] 
+0

Я не хочу, чтобы индекс был исправлен. Есть ли способ, по которому я могу перебирать весь словарь, например {A1: 5, A2: 1, A3: 2379, A4: 8, A5: 37, A6: 379, A7: 6, A8: 4, A9: 23} и ожидать, что выход быть как {A1: 5, A2: 1, A3: 79 A4: 8, A5: 7, A6: 79 A7: 6, A8: 4, A9: 23} –

+0

@RomanPerekhrest: но Пожаловаться на это говорит, что эти строки ... –

+0

@WillemVanOnsem, посмотрим на вторую часть моего ответа 'd [«A1»] = d [«A1»] [2:]' – RomanPerekhrest

Смежные вопросы