所以我有这个字符串的字典:
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)
任何帮助将不胜感激,谢谢
答案 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
。