<p>这是一个相当长的一个比你要去的地方,但这个工作。它创建<code>A</code>表单和<code>B</code>表单的单独列表。然后在<code>B</code>窗体上循环,并查找匹配的<code>A</code>窗体。如果它找到一个匹配项,那么它会将所有<code>A</code>值添加到<code>B</code>表单中</p>
<pre><code>def merge(acases, bcases):
newlist = []
for b in bcases:
for a in acases[:]:
if b.id == a.id:
if not b.cough:
b.cough = a.cough
if not b.fever:
b.fever = a.fever
if not b.gender:
b.gender = a.gender
newlist.append(b)
acases.remove(a)
newlist += acases
return newlist
caselist = [
Case(id="12345", formtype="A", age=12, fever=1, gender="female"),
Case(id="12345", formtype="B", age=12, cough=0),
Case(id="67890", formtype="A", age=34, fever=0, gender="male"),
Case(id="67890", formtype="B", age=34, cough=1),
Case(id="75321", formtype="A", age=2, fever=0, gender="male")
]
acases = [case for case in caselist if case.formtype == 'A']
bcases = [case for case in caselist if case.formtype == 'B']
caselist = merge(acases, bcases)
for i in caselist:
print '{0} {1} {2} {3} {4} {5}'.format(i.id, i.formtype, i.age, i.cough, i.fever, i.gender)
12345 B 12 0 1 female
67890 B 34 1 0 male
75321 A 2 None 0 male
</code></pre>
<p>这是另一种方法,它比我以前的答案更有效,但不如@LeartS的答案有效。这两个答案都可以处理不同的表单布局</p>
^{pr2}$