0
def save(val):
    w = open(val, "w")
    for key in self.bok.iterkeys():
        w.write(self.bok[key])
        w.write(";")
        w.write(key[0])
        w.write(";")
        w.write("\n")
    w.close()

如果我的字典看起来像

bok = {(1,2,3,4,5) : 22}

我想将我的键中的所有元组写入文件中的值,所以它看起来像

22;1
22;2
22;3
etc... 

目前我只得到我的元组中的第一个值来写入文件,22;1. 我知道我得到它,key[0]但我不能真正改变它。

有什么办法可以使这项工作?任何帮助表示赞赏。

4

2 回答 2

2

我认为您需要在此处嵌套第二个 for 循环:

for key in self.bok.iterkeys():
    for subkey in key:
        w.write(self.bok[key])
        w.write(";")
        w.write(subkey)
        w.write(";")
        w.write("\n")
w.close()

另外,考虑使用一些字符串格式:

for key in self.bok.iterkeys():
    for subkey in key:
        w.write("{};{};\n".format(self.bok[key], subkey))
w.close()
于 2013-10-21T18:49:58.773 回答
0

我强烈建议对字典进行序列化。该pickle模块为此提供了支持!为您准备的示例程序:

    import pickle ##Import the pickle module
    bok = {(1,2,3,4,5) : 22} #Define the dictionary
    w = open(val, "wb")#Open the file
    pickle.dump(bok, w)#Dump the dictionary bok, the first parameter into the file object w.
    w.close()

您必须以“wb”模式打开文件,因为泡菜是二进制数据。运行此代码后,该文件val将包含二进制数据。

恢复字典:

    import pickle#import the pickle module
    w=open(val, 'rb')#Open the file
    bok=pickle.load(w)#Assign the recreated object to bok

基本上pickle.dump()将对象转换为可以写入文件的二进制数据。 pickle.load()读取给定的文件并返回重建的对象。

这适用于字典以外的许多 python 对象,如列表和布尔值。

Python 文档picklehttp ://docs.python.org/3.4/library/pickle.html

于 2014-03-29T23:59:48.000 回答