【问题标题】:Change key value in Python 3 dictionary using regex使用正则表达式更改 Python 3 字典中的键值
【发布时间】:2014-10-14 09:05:32
【问题描述】:

鉴于以下字典,我如何返回从键中去除所有非数字的新键?

import re 

dict {'abc_12': 5, 'abc_1': 7, 'abc_34': 10}

for k in dict:
    re.sub('[^0-9]', '', k)
    # change value of first key to '12': 5

【问题讨论】:

  • 您不能有重复的密钥。你想如何处理这个问题?

标签: python regex python-3.x dictionary


【解决方案1】:

如果我的理解正确,您想用新的字典键替换实际的字典键,并删除所有非数字字符。

最简单的方法就是创建一个新字典:

new_dict = {re.sub('[^0-9]', '', k): v for k, v in my_dict.items()}

但如果出于某种原因您绝对需要保留现有的,则需要pop 每个值并插入一个具有现有值的新键。您需要确保在密钥的静态副本上进行操作,否则迭代将包括您插入的新值,您会遇到各种麻烦。

for k in list(dict.keys()):
    v = my_dict.pop(k)
    new_k = re.sub('[^0-9]', '', k)
    my_dict[new_k] = v

【讨论】:

    【解决方案2】:

    您不需要正则表达式:

    >>> di={'abc_12': 5, 'abc_1': 7, 'abc_34': 10}
    >>> {''.join(c for c in k if c in '0123456789'):v for k, v in di.items()}
    {'1': 7, '12': 5, '34': 10}
    

    【讨论】:

      【解决方案3】:

      我认为你最好创建一本新字典:

      old_dict = {'abc_12': 5, 'abc_1': 7, 'abc_34': 10}
      
      new_dict = {re.sub('[^0-9]', '', key): old_dict[key] for key in old_dict}
      

      【讨论】:

      • 您确定要迭代该循环中的键吗?
      • 非常确定 - for key in dict 迭代字典的键。
      猜你喜欢
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 2015-05-26
      • 1970-01-01
      相关资源
      最近更新 更多