<p>从你的代码看来,你可能是相当新的编程,所以首先祝贺你已经尝试解决你的问题。你知道吗</p>
<p>正如您所料,有些您可能还不知道的语言特性可以帮助您解决这样的问题。(也有专门用于解析URL的库,但请指出,这些库对Python的发展没有多大帮助—如果您只是想完成一些工作,它们可能是天赐良机)。你知道吗</p>
<p>因为这个问题有点不清楚(别担心,我只会说英语和写英语,所以你比我先回答),我会尽量解释一个更简单的方法来解决你的问题。从你的代码的最后一块我明白你的意图是:</p>
<blockquote>
<p>"If there are multiple parameters, replace the value of the first with <code>'aaaaa'</code> and the others with <code>'howwww'</code>. If there is only one, replace its value with <code>'test'</code>."</p>
</blockquote>
<p>你的代码是一个公平的尝试(在我认为你想做的)。我希望下面的讨论能对你有所帮助。首先,最初将<code>url</code>设置为示例。你知道吗</p>
<pre><code>>>> url = "https://google.com/?test=sadsad&again=tesss&dadasd=asdaas"
</code></pre>
<p>虽然代码处理多个或一个参数,但它根本不处理任何参数。这可能重要,也可能不重要,但我喜欢<a href="https://en.wikipedia.org/wiki/Defensive_programming" rel="nofollow noreferrer">program defensively</a>,过去犯了太多愚蠢的错误。此外,通过消除“边缘情况”(一般代码流无法处理的情况),及早检测该情况简化了剩余的逻辑。如果我在写一个函数(当你想重复操作时很好),我会从以下内容开始</p>
<pre><code> if "?" not in url:
return url
</code></pre>
<p>我跳过了这个,因为我知道示例字符串是什么,并且我没有编写函数。一旦你知道有争论,你就可以很容易地用</p>
<pre><code>>>> stuff, args = url.split("?", 1)
</code></pre>
<p><code>split</code>的第二个参数是另一个防御措施,告诉它忽略除第一个问号以外的所有问题。因为我们知道<em>至少有一个</em>,这就保证了结果中总是有两个元素,并且Python不会抱怨在该赋值中有不同数量的名称作为值。让我们确认他们的价值观:</p>
<pre><code>>>> stuff, args
('https://google.com/', 'test=sadsad&again=tesss&dadasd=asdaas')
</code></pre>
<p>现在我们只有参数了,我们可以把它们分成一个列表:</p>
<pre><code>>>> key_vals = args.split("&")
>>> key_vals
['test=sadsad', 'again=tesss', 'dadasd=asdaas']
</code></pre>
<p>现在可以创建键、值对的列表:</p>
<pre><code>>>> kv_pairs = [kv.split("=", 1) for kv in key_vals]
>>> kv_pairs
[['test', 'sadsad'], ['again', 'tesss'], ['dadasd', 'asdaas']]
</code></pre>
<p>在这一点上,您可以做任何适当的操作,比如删除元素、更改值、更改键等等。你可以从它们中创建一个字典,但是要注意重复的键。我假设您可以更改<code>kv_pairs</code>以反映您想要的最终URL。你知道吗</p>
<p>一旦进行了必要的更改,将返回值放回一起就相对简单了:我们必须在每个键和值之间放置一个<code>"="</code>,然后在每个结果字符串之间放置一个“&;”,然后用“?”连接这些内容。一步一个脚印:</p>
<pre><code>>>> [f"{k}={v}" for (k, v) in kv_pairs]
['test=sadsad', 'again=tesss', 'dadasd=asdaas']
>>> "&".join(f"{k}={v}" for (k, v) in kv_pairs)
'test=sadsad&again=tesss&dadasd=asdaas'
>>> stuff + "?" + "&".join(f"{k}={v}" for (k, v) in kv_pairs)
'https://google.com/?test=sadsad&again=tesss&dadasd=asdaas'
</code></pre>