Python: Urllib 在使用 urllib.parse.urlencode() 时保持布尔值大写
Python: Urllib keeps booleans capitalized when using urllib.parse.urlencode()
我有一个要 urllib 解析的参数字典,所以我正在使用 urllib.parse.urlencode()
。但是,当其中一个参数是 bool 时,它会在结果中保持 bool 大写,这与我正在尝试做的事情不起作用。
>>> import urllib
>>> args = {'foo': True, 'bar': False}
>>> urllib.parse.urlencode(args)
'foo=True&bar=False'
想要的结果:'foo=true&bar=false'
解决此问题的最佳方法是什么?我可以通过遍历 args
并用小写字符串替换每个 bool 来手动修复它,但我觉得有一种我不知道的更好的方法。
有很多方法可以做到这一点,但这在一定程度上取决于您想要什么;
您可以简单地对结果字符串调用 .lower()
,但请注意,这会将所有内容更改为小写,这可能会破坏其他内容(即,这会破坏 YouTube 引用,因为它们依赖于大写编码更多信息)
urllib.parse.urlencode(args).lower()
否则通过理解或直接更改值来重建你的字典
参考
没有捷径可走。由于 urlencode
方法接受一系列对(元组),理论上不重建字典更有效,而是将此列表作为参数传递:
[(k, str(v).lower() if isinstance(v, bool) else v) for k, v in args.items()]
我有一个要 urllib 解析的参数字典,所以我正在使用 urllib.parse.urlencode()
。但是,当其中一个参数是 bool 时,它会在结果中保持 bool 大写,这与我正在尝试做的事情不起作用。
>>> import urllib
>>> args = {'foo': True, 'bar': False}
>>> urllib.parse.urlencode(args)
'foo=True&bar=False'
想要的结果:'foo=true&bar=false'
解决此问题的最佳方法是什么?我可以通过遍历 args
并用小写字符串替换每个 bool 来手动修复它,但我觉得有一种我不知道的更好的方法。
有很多方法可以做到这一点,但这在一定程度上取决于您想要什么;
您可以简单地对结果字符串调用 .lower()
,但请注意,这会将所有内容更改为小写,这可能会破坏其他内容(即,这会破坏 YouTube 引用,因为它们依赖于大写编码更多信息)
urllib.parse.urlencode(args).lower()
否则通过理解或直接更改值来重建你的字典
参考
没有捷径可走。由于 urlencode
方法接受一系列对(元组),理论上不重建字典更有效,而是将此列表作为参数传递:
[(k, str(v).lower() if isinstance(v, bool) else v) for k, v in args.items()]