Удаление символов из ключей и значений словаря? - PullRequest
1 голос
/ 13 января 2020

Я работаю над подпрограммой по удалению периодов '.' из словаря, который динамически создается при веб-очистке. Ниже приведен код, который я использую, который, кажется, работает правильно, чтобы удалить точки значений словаря (y), но не ключи (x).

Любое руководство о том, как решить эту проблему?

def dot_be_gone(dirty_dic):
    clean_dic = {}
    for x,y in dirty_dic.items():
        clean_x = str(x).strip('.')
        clean_y = str(y).strip('.')
        clean_dic[clean_x] = clean_y
    return(clean_dic)

dot_be_gone({"No. of Pets":"1", "No Problem":"Okay..."})

Это приводит к следующему при выполнении:

{'No. of Pets': '1', 'No Problem': 'Okay'}

Как видите, периоды удалены из 2-е значение, но не от первого ключа.

Ответы [ 3 ]

4 голосов
/ 13 января 2020

.strip() только обрезать символы от начала и до конца, используйте .replace() вместо

x = {'No. of Pets': '1', 'No Problem': 'Okay...'}

{k.replace('.', '') : v.replace('.', '') for k, v in x.items()}

{'No of Pets': «1», «Нет проблем»: «Хорошо»}

1 голос
/ 13 января 2020

Следуя вашему алгоритму, я придумаю решение.

Метод 1: наивным способом с использованием метода полоса

def dot_be_gone(dirty_dic):
    clean_dic = {}
    for x, y in dirty_dic.items():
        clean_x = x
        clean_y = y
        if '.' in x:
            x_items = x.split('.')
            clean_x = x_items[0] + x_items[1]
        if '.' in y:
            y_items = y.split('.')
            clean_y = y_items[0] + y_items[1]
        clean_dic[clean_x] = clean_y
    return(clean_dic)

x = dot_be_gone({"No. of Pets":"1", "No Problem":"Okay..."})
print(x) # {'No of Pets': '1', 'No Problem': 'Okay'}

Метод 2: с использованием метода replace

def dot_be_gone(dirty_dic):
    clean_dic = {}
    for x, y in dirty_dic.items():
        clean_x = x.replace('.', "")
        clean_y = y.replace('.', "")
        clean_dic[clean_x] = clean_y
    return(clean_dic)

x = dot_be_gone({"No. of Pets":"1", "No Problem":"Okay..."})
print(x) # {'No of Pets': '1', 'No Problem': 'Okay'}
0 голосов
/ 13 января 2020

Я не знаю точно, почему это не работает, но вы можете использовать метод .replace, который использует str для замены в первом аргументе, а str для размещения на месте удаленного str во втором аргументе. Так что получается:

 clean_x = x.replace(".", "")
 clean_y = y.replace(".", "")
...