有多个匹配项时进行列表理解匹配的最佳方法

best way to do list comprehension matching when there are multiple matches

我正在扩展一个名为 projects 的列表,以包含另一个列表中的项目所有者。 Projects_with_owner 有两个匹配并正在返回 None。我假设是因为带有 None 的元素是第一个匹配项。如果有的话,我希望能够包括确实有名字的那个。我可以通过排序来做到这一点,并确保首先出现任何有名字的人,但我想知道是否有更好的方法。

Projects_with_owner = [['Project1', None],['Project1','Andrew']]

projects = [['Project1']]

for x in projects:
   x.extend([[y[1]] for y in Projects_with_owner if y[0] == x[0]][0])

print projects

输出:

[['Project1', None]]

期望的输出:

[['Project1', 'Andrew']]

我可能会这样做:

for project in projects:
    project.extend([orig_project[1] for orig_project in Projects_with_owner if
                    orig_project[1] is not None and
                    orig_project[0] == project[0]])

请注意,这会给你

[['Project1', ['Andrew']]]

但允许您拥有多个所有者。

for x in projects:
   x.extend([[y[1]] for y in Projects_with_owner if y[0] == x[0] and y[1] is not None][0])

它可以准确地给出您想要的内容,但是当只有一个与 None 匹配时,这不会扩展您的列表。因此,也许您应该创建一个临时列表,其中包含与项目的所有匹配项,接下来,如果有多个匹配项,则获取具有任何所有者的这些。