我试图合并两个列表,base
和override
,其中base
应该是一个更大的列表,override
是base
中事物的子集。在元素重叠的地方,我希望base
中的对象被override
中的对象覆盖。每个列表中的对象都是具有属性al2000
和de2000
的namedtuple。此外,当对象具有相同的al2000
和de2000
值时,我希望将它们视为“相同的”。我有什么(这似乎是工作)如下,但这有嵌套循环,我想知道是否有更好的方法来做到这一点。你知道吗
# Part of a function
final = []
for i in base:
if all((i.al2000, i.de2000) != (k.al2000, k.de2000) for k in override):
final.append(i)
else:
for k in override:
if (i.al2000, i.de2000) == (k.al2000, k.de2000):
final.append(k)
return final
你可以用一本字典和一些字典的理解。你知道吗
编辑以保留在
override
中省略额外值的原始行为。你知道吗您可以使用
for/else
构造。你知道吗这个解决方案仍然使用嵌套for循环,但是它从原始解决方案中删除了代码重复(迭代
overrides
,比较i
和k
)。你知道吗这个答案采纳了@acushner的建议,使用dict,这可能是最自然的方法。此外,在处理重写时,^{} 非常有用,而且在许多情况下是表示数据结构的最自然的方式。你知道吗
有关链映射的详细信息,请参见this question。你知道吗
相关问题 更多 >
编程相关推荐