擅长:python、mysql、java
<p>方法1:收集所有的名字</p>
<p>如果我们想要的是最容易理解的版本,而不是最圆滑的,也许是类似的</p>
<pre><code>pairs = [('', 'noreply@bookfresh.com'), ('Andrea', 'andrea@aaa.com'), ('Your Book', 'noreply@bookfresh.com')]
data = {}
for name, email in pairs:
if email not in data:
data[email] = []
data[email].append(name)
output = [(email, max(data[email], key=len)) for email in data]
</code></pre>
<p>会有用的。这将问题分为两部分:以电子邮件地址为键,以可能的名称列表为值构建字典;循环遍历所有电子邮件地址并获取最长的名称。你知道吗</p>
<p>第一部分可以用<code>setdefault</code>压缩,例如</p>
<pre><code>for name, email in pairs:
data.setdefault(email, []).append(name)
</code></pre>
<p>但不是每个人都熟悉。你知道吗</p>
<hr/>
<p>方法2:排序并使其唯一</p>
<p>或者,我们可以一次按电子邮件和名称长度排序,然后从中构建一个字典,只保留最后一个键/值对:</p>
<pre><code>>>> pairs.sort(key=lambda x: (x[1], len(x[0])))
>>> data = {v: k for k,v in pairs}
>>> [(v,k) for k,v in data.items()]
[('Andrea', 'andrea@aaa.com'), ('Your Book', 'noreply@bookfresh.com')]
</code></pre>