我使用具有签名功能的库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
我怎样才能在不编辑函数的情况下解决这个问题?
我使用具有签名功能的库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
我怎样才能在不编辑函数的情况下解决这个问题?
根本不允许使用非字符串关键字参数,因此对于这个问题没有通用的解决方案。您的具体示例可以通过将您的键转换dict
为字符串来修复:
>>> kwargs = {1: 2, 3: 4}
>>> f(**{str(k): v for k, v in kwargs.items()})
我认为你能做的最好的就是过滤掉你的字典中的非字符串参数:
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 }