【问题标题】:python adding tuple to list based on string representationpython根据字符串表示将元组添加到列表中
【发布时间】:2018-05-09 21:52:57
【问题描述】:

所以我有这个元组字符串字典:

data = '604452601061112210'

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

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

[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)

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

【问题讨论】:

  • 你为什么循环访问NewDict?只需使用NewDict[op] 即可找到它。

标签: python dictionary tuples


【解决方案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

【讨论】:

  • 效果很好,只是它不会将最后一个 dict 键添加到列表末尾,即“添加”
  • data10 结尾,但ADD12
  • @kieron 更改为data = '604452601061112212' 并以ADD 结尾。
  • 糟糕,对不起!
【解决方案2】:
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) 删除它周围的引号。希望这是你的意思?您不能真正将元组添加到列表中,因为它们是不同的东西。简单地说,元组是一个不可更改的列表。

【讨论】:

    猜你喜欢
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    相关资源
    最近更新 更多