Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-将多个Pickle对象加载到单个字典中_Python_Serialization_Pickle - Fatal编程技术网

Python-将多个Pickle对象加载到单个字典中

Python-将多个Pickle对象加载到单个字典中,python,serialization,pickle,Python,Serialization,Pickle,所以我的问题是。。。我有多个Pickle对象文件(它们是Pickle字典),我想全部加载它们,但实际上是将每个字典合并到一个更大的字典中 例如 我有pickle_file1和pickle_file2都包含字典。我想把pickle_file1和pickle_file2的内容加载到我的dict_期末考试中 编辑 根据我的要求,以下是我目前所拥有的: for pkl_file in pkl_file_list: pickle_in = open(pkl_file,'rb') my_di

所以我的问题是。。。我有多个Pickle对象文件(它们是Pickle字典),我想全部加载它们,但实际上是将每个字典合并到一个更大的字典中

例如

我有pickle_file1和pickle_file2都包含字典。我想把pickle_file1和pickle_file2的内容加载到我的dict_期末考试中

编辑 根据我的要求,以下是我目前所拥有的:

for pkl_file in pkl_file_list:
    pickle_in = open(pkl_file,'rb')
    my_dict = pickle.load(pickle_in)
    pickle_in.close()
本质上,它是有效的,但只是覆盖我的dict的内容,而不是附加每个pickle对象


提前感谢您的帮助。

您可以使用
dict.update
功能

my_dict_final = {}  # Create an empty dictionary
with open('pickle_file1', 'rb') as f:
    my_dict_final.update(pickle.load(f))   # Update contents of file1 to the dictionary
with open('pickle_file2', 'rb') as f:
    my_dict_final.update(pickle.load(f))   # Update contents of file2 to the dictionary
print my_dict_final
pickle_dict1 = pickle.load(picke_file1)
pickle_dict2 = pickle.load(picke_file2)
my_dict_final = pickle_dict1
my_dict_final.update(pickle_dict2)

@Nunchux,@Vikas-Ojha如果字典碰巧有公共键,那么
update
方法将很不幸地覆盖这些公共键的值。例如:

>>> dict1 = {'a': 4, 'b': 3, 'c': 0, 'd': 4}
>>> dict2 = {'a': 1, 'b': 8, 'c': 5}

>>> All_dict = {}                   
>>> All_dict.update(dict1)          
>>> All_dict.update(dict2)          

>>> All_dict                        
{'a': 1, 'b': 8, 'c': 5, 'd': 4}

如果您希望避免这种情况并继续添加公共密钥的计数,一个选项是使用以下策略。应用于您的示例,下面是一个最小的工作示例:

import os 
import pickle
from collections import Counter 

dict1 = {'a': 4, 'b': 3, 'c': 0, 'd': 4}
dict2 = {'a': 1, 'b': 8, 'c': 5}

# just creating two pickle files: 
pickle_out = open("dict1.pickle", "wb") 
pickle.dump(dict1, pickle_out) 
pickle_out.close() 

pickle_out = open("dict2.pickle", "wb")  
pickle.dump(dict2, pickle_out) 
pickle_out.close()  

# Here comes: 
pkl_file_list = ["dict1.pickle", "dict2.pickle"]

All_dict = Counter({})  
for pkl_file in pkl_file_list:  
    if os.path.exists(pkl_file):  
        pickle_in = open(pkl_file, "rb")  
        dict_i = pickle.load(pickle_in)  
        All_dict = All_dict + Counter(dict_i)  

print (dict(All_dict))
这将很高兴地为您提供:

{'a': 5, 'b': 11, 'd': 4, 'c': 5}

请发布您到目前为止尝试过的内容。您的答案解决了问题,但在资源方面,我们不必要地创建了两个额外的dict对象。哈哈,没问题。我很高兴这有帮助。