<p>既然字段名都是有效的Python标识符,为什么不将数据读入namedtuples而不是dict呢?你知道吗</p>
<pre><code>data = """Form Dosage ReferenceDrug drugname activeingred INJECTABLE; INJECTION 20,000 UNITS/ML LIQUAEMIN SODIUM HEPARIN SODIUM INJECTABLE; INJECTION 40,000 UNITS/ML LIQUAEMIN SODIUM HEPARIN SODIUM INJECTABLE; INJECTION 5,000 UNITS/ML LIQUAEMIN SODIUM HEPARIN SODIUM INJECTABLE""".split('; ')
from collections import namedtuple
# define class DrugData as a namedtuple, using the headers from data[0]
DrugData = namedtuple("DrugData", data[0])
# use a list comprehension to create a DrugData for each data line
druglist = [DrugData(*line.split('\t')) for line in data[1:]]
# access each tuple in druglist, using attribute access to individual fields
for d in druglist:
print "%s | %s | %s" % (d.ReferenceDrug, d.Form, d.Dosage)
</code></pre>
<p>印刷品:</p>
<pre><code>LIQUAEMIN | INJECTION | 20,000 UNITS/ML
LIQUAEMIN | INJECTION | 40,000 UNITS/ML
LIQUAEMIN | INJECTION | 5,000 UNITS/ML
</code></pre>
<p>编辑:</p>
<p>回顾您原来的问题,看起来您想创建一个包含所有这些条目的dict,由<code>drugname</code>键控。不幸的是,dict键必须是唯一的,在您的示例中,所有3个条目都具有相同的<code>drugname</code>。您可能需要组合2个或更多字段,才能为处理所有这些值的dict(例如<code>(drugname, Dosage)</code>元组)组成一个真正唯一的键。你知道吗</p>
<p>或者,稍微更改一下设计,使每个<code>drugname</code>指向一个匹配值的列表。最简单的方法是使用defaultdict而不是dict,这样新条目就会自动初始化为空列表。在代码中,您将添加一个import语句:</p>
<pre><code>from collections import defaultdict
</code></pre>
<p>并将药物声明改为:</p>
<pre><code>meds_dict = defaultdict(list)
</code></pre>
<p>这意味着,任何尚未看到的新键都将使用作为defaultdict参数提供的函数/类进行初始化,在本例中是<code>list</code>。你知道吗</p>
<p>然后,要将新条目添加到药物目录中,而不是用“=”赋值,您需要附加到所有匹配药物/剂量的列表中:</p>
<pre><code>meds_dict[DrugName].append(meds)
</code></pre>
<p>现在,对于任何药品名称,您将得到匹配的表单/剂量/等记录的列表。你知道吗</p>