python pickle:仅将唯一列表转储到 pickle 文件

python pickle: dump only unique list to pickled file

我有一个函数可以为每个样本生成一个基因名称列表。我想保存此列表并在其他时间重新使用它。但是,当转储到 pickle 文件中时,我喜欢先读取 pickle 文件,并且只 select 只转储不在 pickle 文件中的基因。我不希望我的 pickle 文件包含重复的基因列表,因为它会创建一个巨大的 pickle 文件。

例如

如果我的 pickled 文件已经包含以下基因:'a'、'ab'、'ac' 而我新创建的列表是:

unique_genes_list = ["a", "ab", "ac", "ad"]

那我只想把 'ad' 倒出来泡菜。有什么好的方法吗?

谢谢

如果您的目标是将新基因 'ad' 添加到现有的基因列表中,您可以按照以下方法从 pickle 中读取旧数据,添加新基因并重新 pickle:

import pickle

unique_genes_list = ["a", "ab", "ac", "ad"]
with open('some/path', 'rb') as in_pickle:
    old_data = pickle.load(in_pickle) ## ["a", "ab", "ac"]

## Adds 'ad' and any other new data
old_data.extend([x for x in unique_genes_list if not x in old_data]) 

## Save the new combined data
with open('some/path', 'wb') as out_pickle: 
    pickle.dump(old_data, out_pickle) ## dumps ["a", "ab", "ac", "ad"] overwriting old pickle

编辑:

如果您希望只检索唯一值并只是 pickle ['ad'],那么您可以这样做

import pickle

unique_genes_list = ["a", "ab", "ac", "ad"]
with open('some/path', 'rb') as in_pickle:
    old_data = pickle.load(in_pickle) ## ["a", "ab", "ac"]

## Gets just 'ad' or any other unique in a new list
new_genes = [x for x in unique_genes_list if not x in old_data] ##['ad']

## Save the new unique data
with open('some/new/path', 'wb') as out_pickle: 
    pickle.dump(new_genes, out_pickle) ## dumps ["ad"]