12

我使用具有签名功能的库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

我怎样才能在不编辑函数的情况下解决这个问题?

4

2 回答 2

12

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

>>> kwargs = {1: 2, 3: 4}
>>> f(**{str(k): v for k, v in kwargs.items()})
于 2013-02-20T14:10:16.470 回答
1

我认为你能做的最好的就是过滤掉你的字典中的非字符串参数:

kwargs_new = {k:v for k,v in d.items() if isinstance(k,str)}

原因是因为关键字参数必须是字符串。否则,他们会在另一边打开什么包装?

或者,您可以将非字符串键转换为字符串,但您会冒着覆盖键的风险:

kwargs_new = {str(k):v for k,v in d.items()}

——考虑一下如果你从以下开始会发生什么:

d = { '1':1, 1:3 }
于 2013-02-20T14:10:21.903 回答