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

时间:2015-03-11 21:26:49

标签: python python-2.7 list-comprehension

我正在扩展名为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']]

2 个答案:

答案 0 :(得分:3)

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])

你可以提供你想要的东西,但是当只有一个匹配时,这并不会扩展你的清单。所以也许你应该创建一个临时列表,其中包含与项目的所有匹配项,如果有多个匹配项,则创建一个临时列表,获取具有任何所有者的匹配项。

答案 1 :(得分:1)

我可能会这样做:

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']]]

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