如何将 .format(**dict) 与循环更新的字典一起使用?
How to use .format(**dict) with a dictionary that gets updated in a loop?
我正在尝试进行一些地图抓取,我用参数字典 'on the fly' 填充 URL 字符串,如下所示:
par = {'zoom': 13, 'latmin': 2835, 'latmax': 2844, 'lonmin': 4464, 'lonmax': 4475, 'ext': 'png'}
url = 'https://some.url.com/{zoom}/{lat}/{lon}.{ext}'
for lat in range(par['latmin'], par['latmax']):
par['lat'] = lat
for lon in range(par['lonmin'], par['lonmax']):
par['lon'] = lon
url = url.format(**par)
字典已更新,但由于某种原因,URL 字符串在第一次迭代时卡住了。为什么?
您用 格式化 字符串(其中占位符已替换为它们保留位置的数据)覆盖了格式字符串(其中包含新值的占位符)。从第二次迭代开始,字符串中没有 {lat}
或 {lon}
占位符。如果您在第一个内循环 运行 之后立即打印 url
,您会看到现在的内容是:
url = 'https://some.url.com/{zoom}/2835/4464.{ext}'
仍然有 {zoom}
和 {ext}
的占位符,但其他占位符的值是固定的,所以在未来的循环中没有什么要更新的。
如果您不希望发生这种情况,请不要在 format
之后分配回 url
,为部分格式化的字符串使用不同的名称(或使用 list
这种部分格式化的字符串,如果你想要 lat
和 lon
) 的每个组合。
我正在尝试进行一些地图抓取,我用参数字典 'on the fly' 填充 URL 字符串,如下所示:
par = {'zoom': 13, 'latmin': 2835, 'latmax': 2844, 'lonmin': 4464, 'lonmax': 4475, 'ext': 'png'}
url = 'https://some.url.com/{zoom}/{lat}/{lon}.{ext}'
for lat in range(par['latmin'], par['latmax']):
par['lat'] = lat
for lon in range(par['lonmin'], par['lonmax']):
par['lon'] = lon
url = url.format(**par)
字典已更新,但由于某种原因,URL 字符串在第一次迭代时卡住了。为什么?
您用 格式化 字符串(其中占位符已替换为它们保留位置的数据)覆盖了格式字符串(其中包含新值的占位符)。从第二次迭代开始,字符串中没有 {lat}
或 {lon}
占位符。如果您在第一个内循环 运行 之后立即打印 url
,您会看到现在的内容是:
url = 'https://some.url.com/{zoom}/2835/4464.{ext}'
仍然有 {zoom}
和 {ext}
的占位符,但其他占位符的值是固定的,所以在未来的循环中没有什么要更新的。
如果您不希望发生这种情况,请不要在 format
之后分配回 url
,为部分格式化的字符串使用不同的名称(或使用 list
这种部分格式化的字符串,如果你想要 lat
和 lon
) 的每个组合。