有多个匹配项时进行列表理解匹配的最佳方法
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 匹配时,这不会扩展您的列表。因此,也许您应该创建一个临时列表,其中包含与项目的所有匹配项,接下来,如果有多个匹配项,则获取具有任何所有者的这些。
我正在扩展一个名为 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 匹配时,这不会扩展您的列表。因此,也许您应该创建一个临时列表,其中包含与项目的所有匹配项,接下来,如果有多个匹配项,则获取具有任何所有者的这些。