如何替换 kwargs 键中的特定子字符串?

How do I replace specific substrings in kwargs keys?

我需要替换字典键值中的特定子字符串。所以:

def some_func(name, **kwargs):
    ## Do stuff ##
    print(f"<{name}", *(f"{key}={value}" for key, value in kwargs.items()), ">")

kwargs = {'foo__':'bar', 'foo_bar':'baz'}
some_func(name='some_name', kwargs)

# Output should be:
<some_name foo=bar foo-bar=baz >
#

因此 kwargs 中的每个 key 需要替换为:

{'foo':'bar', 'foo-bar':'baz'}

本质上是 key.replace('__', '')key.replace('_', '-').
我试过为此使用字典:

key_to_replace = {'__':'', '_', '-'}

print(f"<{name}", *(f"{key.replace(key, value for key, value in key_to_replace.items())}={value}" for key, value in kwargs.items()), ">")

但是它不起作用,上面写着Generator Expression must be parenthesized
我试过用括号括起来 key, value for key, value in key_to_replace.items(),但结果是 SyntaxError.

我该怎么做?

尝试:

def some_func(name, **kwargs):
    # replace the __ and _ accordingly:
    kwargs = {
        k.replace("__", "").replace("_", "-"): v for k, v in kwargs.items()
    }
    print(f"<{name}", *(f"{key}={value}" for key, value in kwargs.items()), ">")


kwargs = {"foo__": "bar", "foo_bar": "baz"}
some_func(name="some_name", **kwargs)    # <-- put ** here

打印:

<some_name foo=bar foo-bar=baz >