<p>请注意:<strong>集合中元素的顺序是未定义的,尽管它可能由各种元素组成。</strong>通过将<code>set</code>转换为<code>list</code>您无法确保顺序保持不变</p>
<pre class="lang-py prettyprint-override"><code>>>> li = list({"Country", "Time", "w", "z"})
>>> li
['z', 'Country', 'w', 'Time']
</code></pre>
<p>问题中的代码也不能正常运行</p>
我的答案是基于您预期的输出,并且我没有考虑边缘情况,我强烈建议更改函数参数。此外,我认为<code>_filter</code>是一个列表<code>["Country", "Time"]</code></p>
<pre class="lang-py prettyprint-override"><code>def get_url(par, att=None, _filter=None):
url = f"https://mytest.com/api/Test/{par}?size=100000&filters="
if att:
result_list = [{'VarA':k, 'Val':v} for k , v in att.items()]
else: return "some string"
if _filter:
_filter.reverse()
for d in result_list:
d["VarB"] = _filter.pop()
return f"{url}{result_list}"
url = get_url(
"Sales", {"Loc": ["USA", "CAN"], "Year": ["2016", "2017"], "wewe": ["4", "5"]}, ["Country", "Time", "wre"]
)
print(url)
# https://mytest.com/api/Test/Sales?size=100000&filters=[{'VarA': 'Loc', 'Val': ['USA', 'CAN'], 'VarB': 'Country'}, {'VarA': 'Year', 'Val': ['2016', '2017'], 'VarB': 'Time'}, {'VarA': 'wewe', 'Val': ['4', '5'], 'VarB': 'wre'}]
</code></pre>