首页 > 解决方案 > 如何替换 kwargs 键中的特定子字符串?

问题描述

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

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 >
#

因此,每个keyin都kwargs需要替换为:

{'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

我该怎么做呢?

标签: pythonpython-3.xdictionarykeyword-argument

解决方案


尝试:

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 >

推荐阅读