gpt4 book ai didi

Python - 嵌套字典。错误在哪里?

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:26 25 4
gpt4 key购买 nike

我有一个 CSV 文件,我已将其过滤到列表中并分组。示例:

     52713
['52713', '', 'Vmax', '', 'Start Value', '', '\n']
['52713', '', 'Vmax', '', 'ECNumber', '1.14.12.17', '\n']
['52713', 'O2', 'Km', 'M', 'Start Value', '3.5E-5', '\n']
['52713', 'O2', 'Km', 'M', 'ECNumber', '1.14.12.17', '\n']
52714
['52714', '', 'Vmax', '', 'Start Value', '', '\n']
['52714', '', 'Vmax', '', 'ECNumber', '1.14.12.17', '\n']
['52714', 'O2', 'Km', 'M', 'Start Value', '1.3E-5', '\n']
['52714', 'O2', 'Km', 'M', 'ECNumber', '1.14.12.17', '\n']

据此,我创建了一个具有以下结构的嵌套字典:

   dict = ID number:{Km:n, Kcat:n, ECNumber:n}

...对于列表中的每个 ID。

我使用下面的代码来创建这个字典

    dict = {}

for key, items in groupby(FilteredTable1[1:], itemgetter(0)):
#print key
for subitem in items:
#print subitem
dict[subitem[EntryID]] = {}
dict[subitem[EntryID]]['EC'] = []
dict[subitem[EntryID]]['Km'] = []
dict[subitem[EntryID]]['Kcat'] = []
if 'ECNumber' in subitem:
dict[subitem[EntryID]]['EC'] = subitem[value]

if 'Km' in subitem and 'Start Value' in subitem:
dict[subitem[EntryID]]['Km'] = subitem[value]
#print subitem

这适用于 ECNumber 值,但不适用于 Km 值。它可以打印该行,表明它已将 Km 值标识为存在,但不会将其放入字典中。

示例输出:

    {'Km': [], 'EC': '1.14.12.17', 'Kcat': []}

有什么想法吗?

最佳答案

问题是您的内部 for 循环不断重新初始化 dict[subitem[EntryID]],即使它可能已经存在。通过显式检查它是否已经存在,已在以下内容中修复:

dict = {}

for key, items in groupby(FilteredTable1[1:], itemgetter(0)):
#print key
for subitem in items:
#print ' ', subitem
if subitem[EntryID] not in dict:
dict[subitem[EntryID]] = {}
dict[subitem[EntryID]]['EC'] = []
dict[subitem[EntryID]]['Km'] = []
dict[subitem[EntryID]]['Kcat'] = []

if 'ECNumber' in subitem:
dict[subitem[EntryID]]['EC'] = subitem[value]

if 'Km' in subitem and 'Start Value' in subitem:
dict[subitem[EntryID]]['Km'] = subitem[value]
#print subitem

但是,可以通过使用类似以下的内容来使此代码更高效,从而避免重新计算值和双重字典查找。它也不使用内置类型的名称作为变量名称,这违反了 PEP8 - Style Guide for Python Code 中给出的指南。 .它还建议仅对类名使用 CamelCase,而不是像 FilteredTable1 这样的变量名——但我没有改变这一点。

adict = {}

for key, items in groupby(FilteredTable1[1:], itemgetter(0)):
#print key
for subitem in items:
#print ' ', subitem
entry_id = subitem[EntryID]
if entry_id not in adict:
adict[entry_id] = {'EC': [], 'Km': [], 'Kcat': []}

entry = adict[entry_id]
if 'ECNumber' in subitem:
entry['EC'] = subitem[value]

if 'Km' in subitem and 'Start Value' in subitem:
entry['Km'] = subitem[value]
#print subitem

实际上,由于您正在构建字典的字典,因此不清楚使用 groupby 这样做有什么好处。

关于Python - 嵌套字典。错误在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29035205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com