从Python中的字典键重建数据

时间:2018-08-04 22:46:25

标签: python python-3.x

我正在从包含字典的二进制文件中读取数据,如下所示:

a_dict = 
{'8a50b9f75b57104d89b58305d96045df':[b'\x94*\x08\x9d\xd8', 0, 1, 4, 6, 7],
 'bff92f621cc65e2103305343a943c9a8':[b'\x85*\xe4\xf0\xd7', 2, 3, 5, 8, 9]}

其中二进制代码是文件内容本身,其余列表项是索引。因此,对于这种特定情况,输出应如下所示(不带双倍空格):

    (1st hash)          (1st hash)        (2nd hash)        (2nd hash)
\x94*\x08\x9d\xd8  \x94*\x08\x9d\xd8  \x85*\xe4\xf0\xd7  \x85*\xe4\xf0\xd7 ...

我在执行此操作时遇到了一些麻烦,本网站上的其他示例并非我所需要的(我确定它们在那里,但也许我在搜索错误的关键字) )。

我的代码如下:

with open(fname, 'rb') as f:
    a_dict = pickle.load(f)
    for value in a_dict.values():
        print(value[1:])

这给了我两个用来重建文件的列表[0, 1, 4][2, 3, 5]。我需要一种方法来遍历这些列表(顺序为0、1、2、3,...)并连接相应的字节。

1 个答案:

答案 0 :(得分:0)

假设您需要连接的字节是每个列表的首个元素,那么:

with open(fname, 'rb') as f:
    bytes_list = []
    a_dict = pickle.load(f)
    for values_list in a_dict.values():
        file_bytes = values_list.pop(0)
        for Val in values_list:
            bytes_list.append((val, file_bytes[Val]))
Result = [byt for Val, byt in sorted(bytes_list, key=lambda x: x[1])]

对不起,可能是编译错误,我在手机上