【发布时间】:2020-11-18 19:23:58
【问题描述】:
可能不重要的上下文:
我有一个将字符串写入文件的脚本。这些字符串从一个主列表开始,被分离到单独的列表中,其中一些然后通过网络爬虫,生成更多字符串,然后将输出写入 fasta 文件。因此,有很多索引检查来协调这些列表之间的输出。
要检查其所有工作是否正常,我想将最终的 fasta 文件与初始主列表进行比较,以检查不同列表之间的索引是否产生了预期的输出。为此,我将 fasta 文件作为big_list 写入,然后重新创建初始主列表。下面的问题是这项工作的一部分。
问题:
我正在尝试根据big_list 的内容更新字典,但我的字典更新正在做一些奇怪的事情。它正在分配值 OK,但它不区分不同的键,因此所有值都作为重复列表分配给每个键。
我首先将脚本前面的键列表 (dict_key_list) 转换为字典:
dict_key_list=[dict_key1_str, dict_key2_str, ...]
dictionary=dict.fromkeys(set(dict_key_list), []) #--> {dict_key1_str:[], dict_key2_str:[], .........}
然后我尝试根据上述big_list 对象更新它。但就像我说的那样,发生了一些奇怪的事情。谁能告诉我什么,而我一直在想它?
#big list format = ['dict_key1_str \t value1_str', 'dict_key1_str \t value2_str',......,'dict_key2_str \t value1000_str','dict_key2_str \t value1001_str',... for more keys]
for list_object_str in big_list:
#break into a list: 'dict_key1 \t value1' --> [dict_key1, value1]
list_object_list=re.split(r'\t+', list_object_str)
#pull key from list above
dict_key_str=list_object_list[0]
#pull the value I want to append from list above
value_add_str=list_object_list[1]
#get whatever value is currently assigned to key - this is a list
current_dict_value=dictionary[dict_key_str]
#add append value to current value
current_dict_value.append(value_add_str)
#assign new value to dict key
dictionary[dict_key_str]=current_dict_value
#have also tried dictionary.update({dict_key:current_dict_value})
这会将两组值分配给每个键 - 因此从 1 到 999 和 1000 到最终值索引的所有值都作为相同的大列表分配给每个键:
{'dict_key1_str':[value1_str,value2_str,...last_value_str], 'dict_key2_str':[value1_str,value2_str,...last_value_str], ... more keys same value lists}
我真正想要的是:
{'dict_key1_str':[value1_str,value2_str,...value999_str], 'dict_key2_str':[value1000_str,value1001_str,...last_value_key2_str], ... more keys different value lists}
【问题讨论】:
标签: python-3.x dictionary