【问题标题】:Python - splitting string into list based on dict tuple valuePython - 根据字典元组值将字符串拆分为列表
【发布时间】:2018-10-06 14:00:52
【问题描述】:

我有一个元组字典。我匹配字符串中的第一个元组值。如果满足该值,我想将此值以及下一个字符数量添加到基于第二个元组的 a 中,作为列表的单个条目

data = 60806122225212888810

Dict = {'STOP' : ('60', 2), 'ADD' : ('61', 4), 'MUL' : ('52', 0), 'SUB' : ('10', 0), 'START' : ('12', 4)}

我想要的输出是 ['6080', '612222', '52', '128888', '10']`的列表

这是我当前的代码:

 while i<len(data):
    if data [i:i+2] in Opcodes_Dict[item][0]:
        L.append(data[i:i+Opcodes_Dict[item][1]])
        i+=Opcodes_Dict[item][1]
    else:
      L.append(data[i:i+2])
      i+=2
 print(L)

对不起,如果这很难理解,我很卡住

【问题讨论】:

  • 对于所需输出中的第二项,为什么没有'612222'
  • 还有,key值不重要吗?
  • 对不起,我确实需要它作为612222,我会重新编辑
  • key无所谓
  • 另外,dict 对象没有排序。你的意思是使用orderdict吗?如果没有,您是否希望程序能够回顾?例如,11221133{'key':('11', 2), 'key2':('11',2)} 是否会返回 ['1122', '1122']['1122','1133']

标签: python-3.x list dictionary tuples


【解决方案1】:

由于密钥无关紧要,因此只需使用操作码和值创建一个 dict。在你的循环中,测试操作码是否在这个新的字典中,并相应地切片:

data = '60806122225212888810'

Dict = {'STOP' : ('60', 2), 'ADD' : ('61', 4), 'MUL' : ('52', 0), 'SUB' : ('10', 0), 'START' : ('12', 4)}

Opcodes_Dict = {a:b for k,(a,b) in Dict.items()}

i = 0
L = []
while i < len(data):
    op = data[i:i+2]
    if op in Opcodes_Dict:
        value = Opcodes_Dict[op]
        L.append(data[i:i + 2 + value])
        i += 2 + value
    else:
        L.append(op)
        i += 2
print(L)

输出:

['6080', '612222', '52', '128888', '10']

【讨论】:

  • Python 字典未排序!
  • @UnsignedByte 它不依赖于订单。 OP 的代码一次抓取两个字符,然后进行查找。混合字典,你会得到与这段代码相同的结果。
  • @UnsignedByte 仅供参考,Python 3.6 通过实现维护插入顺序,Python 3.7 保证了这一点。
  • 感谢您的澄清!抱歉,我不太确定问题在问什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多