我有这本字典.

maximo = {'CodChamado': 50, '_14984|Top Down:': 0, '_14985|Hierarquia solicitante:': 0}

我想把这些键"_14984|Top Down:""_14985|Hierarquia solicitante:"换成

new_key = ['Campo Extra|Top Down:', 'Campo Extra|Hierarquia solicitante:']

结果是新词典:

new_maximo = {'CodChamado': 50, 'Campo Extra|Top Down:': 0, 'Campo Extra|Hierarquia solicitante:': 0}

我试过这么做,但没有成功:

old_key = []
for key in self.maximo:
    if key[0] == "_":
        old_key.append(key)

for i in new_key:
    for j in old_key:
        self.maximo[i] = self.maximo[j]
        del self.maximo[j]

出现以下错误:

File "<string>", line 3, in <module>
KeyError: '_14984|Top Down:'

有人知道怎么做吗?

推荐答案

这样做不需要两个循环.如果您知道原始密钥,那么要获得新密钥,您只需将从"_"开始到"|"结束的部分替换为"Campo Extra|".您可以使用以下正则表达式来实现这一点:

import re

new_dict = {
    re.sub(r"^_.*?\|", "Campo Extra|", k): v
    for k, v in maximo.items()
}

这不是替换原始dict中的键,而是创建了一个新的字典,如下所示:

{'CodChamado': 50,
 'Campo Extra|Top Down:': 0,
 'Campo Extra|Hierarquia solicitante:': 0}

正则表达式(Try it online)的解释:

^_.*?\|
^        : Start of the string
 _       : An underscore
  .*?    : Zero or more of any character, lazy match
     \|  : A pipe character

如果要替换原始词典中的键,可以这样做:

for k in list(maximo):
    new_key = re.sub(r"^_.*?\|", "Campo Extra|", k)
    if new_key != k:
        maximo[new_key] = maximo.pop(k)

如果您想完全避免正则表达式,那么只需使用执行相同操作的函数替换对re.sub的调用:

def modify_key(k, replacement):
    if k[0] != "_": return k
    try:
        pipe_loc = k.index("|")
        new_k = "Campo Extra" + k[pipe_loc:]
        return new_k
    except ValueError:
        # "|" not found in k
        return k

new_dict = {
    modify_key(k, "Campo Extra"): v
    for k, v in maximo.items()
}

Python相关问答推荐

需要计算60,000个坐标之间的距离

优化pytorch函数以消除for循环

基于索引值的Pandas DataFrame条件填充

Python—从np.array中 Select 复杂的列子集

Odoo 16使用NTFS使字段只读

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

实现神经网络代码时的TypeError

Plotly Dash Creating Interactive Graph下拉列表

如何在Python中获取`Genericums`超级类型?

Django admin Csrf令牌未设置

* 动态地 * 修饰Python中的递归函数

以异步方式填充Pandas 数据帧

一个telegram 机器人应该发送一个测验如何做?""

对于标准的原始类型注释,从键入`和`从www.example.com `?

多索引数据帧到标准索引DF

如何在networkx图中提取和绘制直接邻居(以及邻居的邻居)?

将.exe文件从.py转换后出现问题.";ModuleNotFoundError:没有名为';Selify;的模块

具有数值数组问题的递归矩阵构造(广播?)

在PySpark中,可以从数组中获取任意数量的元素吗?

使用BeautifulSoap库从Web获取表格时没有响应