在python中查找并替换部分字典值

时间:2014-09-17 16:55:03

标签: python dictionary replace

我有一个python字典,我想找到并替换字典值中的部分字符。我正在使用python 2.7。 我的字典是

data1 = {'customer_order': {'id': '20'},
         'patient': 
             {'birthdate': None,
             'medical_proc': None,
             'medical_ref': 'HG_CTRL12',
             'name': 'Patient_96',
             'sex': None},
          'physician_name': 'John Doe'
         }

我想仅在字典的值中将下划线更改为反斜杠下划线,在这种情况下仅适用于Patient_96和HG_CTRL12。

我想将其更改为以下内容:

 data1 = {'customer_order': {'id': '20'},
          'patient': 
              {'birthdate': None,
               'medical_proc': None,
               'medical_ref': 'HG\_CTRL12',
               'name': 'Patient\_96',
               'sex': None},
          'physician_name': 'John Doe'
         }

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

此函数以replace_char递归替换字典值中的下划线:

def replace_underscores(a_dict, replace_char):
    for k, v in a_dict.items():
        if not isinstance(v, dict):
            if v and '_' in v:
                a_dict[k] = v.replace('_', replace_char)
        else:
            replace_underscores(v, replace_char)

有关isinstance() here的更多信息。

答案 1 :(得分:0)

>>> for i in data1:
...     if type(data1[i]) is str:
...             if data1[i]:
...                     data1[i] = data1[i].replace('_','\_')
...     elif type(data1[i]) is dict:
...             for j in data1[i]:
...                     if data1[i][j]:
...                             data1[i][j] = data1[i][j].replace('_','\_')
... 
>>> 
>>> 
>>> data1
{'physician_name': 'John Doe', 'customer_order': {'id': '20'}, 'patient': {'medical_ref': 'HG\\_CTRL12', 'medical_proc': None, 'name': 'Patient\\_96', 'birthdate': None, 'sex': None}}