python基于字符串表示将元组添加到列表中

时间:2018-05-09 21:52:57

标签: python dictionary tuples

所以我有这个字符串的字典:

data = '604452601061112210'

NewDict = {'60': ('PUSH1', 1), '61': ('PUSH2', 2), '52' : ('MSTORE', 0 ), '12' : ('ADD', 0)}

我试图扫描字符串中的字典键,添加以将dict键添加到列表中,以及字符串中的以下字节,例如,它应按此顺序打印出来:

[PUSH1 44, MSTORE, PUSH1 10, PUSH2 1122, ADD]

但是,我的输出是:

['PUSH1 44', 'MSTORE ', 'PUSH1 10', 'PUSH2 2210']

这是我的代码:

i = 0
L = []

while i < len(data):
    op = data[i:i+2]

    for item in NewDict:
        if op in item:
            i += NewDict[item][1] * 2

            pep = NewDict[item][0] + ' ' + data[i:i+NewDict[item][1] * 2]
            L.append(pep)     
    else:
        i += 2

print(L)

任何帮助将不胜感激,谢谢

2 个答案:

答案 0 :(得分:1)

i = 0
L = []

while i < len(data):
    op = data[i:i+2]

    for item in NewDict:
        if op in item:
            i += NewDict[item][1] * 2

            pep = NewDict[item][0] + ' ' + data[i:i+NewDict[item][1] * 2]
            L.append(pep)     
    else:
        i += 2

print(','.join(L))

','.join(L)删除了它周围的引号。希望这是你的意思?你不能真正将一个元组添加到列表中,因为这些是不同的东西。简单地说,元组是一个不可更改的列表。

答案 1 :(得分:1)

问题是,在提取运算符后的参数之前,您需要按i 递增NewDict[item][1] * 2。你应该在解压后这样做。

您也不需要for item in NewDict:循环,只需直接访问NewDict元素。

while i < len(data):
    op = data[i:i+2]
    if op in NewDict:
        opname, oplen = NewDict[op]
        param = data[i+2:i+2+oplen*2]
        L.append(opname + " " + param)
        i += 2 + oplen*2
    else:
        i += 2

即使在修复此问题后,您也不会在结果中获得ADD,因为data中的最后一项操作是10,而不是12