【问题标题】:How do I replace specific substrings in kwargs keys?如何替换 kwargs 键中的特定子字符串?
【发布时间】:2021-07-17 08:31:22
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

  • 您的代码@RedFox 中有一些不匹配的括号
  • @Vishnudev 你能指出需要纠正的地方吗?

标签: python python-3.x dictionary keyword-argument


【解决方案1】:

试试:

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 >

【讨论】:

  • 哦,谢谢安德烈!这很完美。只是好奇,是否也可以在k 中添加另一个.replace()
  • @RedFox 是的,当然。但如果你有很多替代品,我建议使用 re 模块 (re.sub)。
猜你喜欢
  • 1970-01-01
  • 2020-10-04
  • 2019-04-12
  • 2012-09-04
  • 2020-02-15
  • 2016-03-05
  • 2011-01-07
  • 1970-01-01
  • 2015-06-07
相关资源
最近更新 更多