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