使用非字符串关键字传递dict以在kwargs中运行

ato*_*era 7 python arguments function python-3.x

我使用具有签名功能的库f(*args, **kwargs).我需要在kwargs参数中传递python dict,但是dict不包含关键字中的字符串

f(**{1: 2, 3: 4})
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: f() keywords must be strings
Run Code Online (Sandbox Code Playgroud)

如何在不编辑功能的情况下解决这个问题?

Fre*_*Foo 9

不允许使用非字符串关键字参数,因此没有针对此问题的通用解决方案.您可以通过将您的键转换dict为字符串来修复您的具体示例:

>>> kwargs = {1: 2, 3: 4}
>>> f(**{str(k): v for k, v in kwargs.items()})
Run Code Online (Sandbox Code Playgroud)

  • @Will - 我认为最好的东西真的取决于你传入的词汇.在这里考虑字典`d = {'1':1,1:3}. (2认同)
  • 我认为_true_最佳解决方案是将函数重写为只接受字符串关键字或者使用可选的dict参数来传递字典. (2认同)