У меня есть list of dict
s:
print (L)
[{0: 'x==1', 1: 'y==2', 2: 'z!=1'}, {0: 'x==1', 1: 'y<=3', 2: 'z>1'}]
Я хочу создать кортежи со значением до операторов, операторов и значение после:
#first step
wanted = [[('x', '==', '1'), ('y', '==', '2'), ('z', '!=', '1')],
[('x', '==', '1'), ('y', '<=', '3'), ('z', '>', '1')]]
И затем отобразить второе значение с помощью операторов:
import operator
ops = {'>': operator.gt,
'<': operator.lt,
'>=': operator.ge,
'<=': operator.le,
'==': operator.eq,
'!=': operator.ne}
#expected final output
wanted = [[('x', <built-in function eq>, '1'),
('y', <built-in function eq>, '2'),
('z', <built-in function ne>, '1')],
[('x', <built-in function eq>, '1'),
('y', <built-in function le>, '3'),
('z', <built-in function gt>, '1')]]
Я пытаюсь:
L = [[re.findall(r'(.*)([<>=!]+)(.*)', v)[0] for k, v in x.items()] for x in L]
print (L)
[[('x=', '=', '1'), ('y=', '=', '2'), ('z!', '=', '1')],
[('x=', '=', '1'), ('y<', '=', '3'), ('z', '>', '1')]]
L = [[ops[y[1]] for y in x] for x in L]
Но проблема в том, что неверно сопоставлены средние подстроки - операторы, а затем неверно сопоставлено значение оператора.
Что такое правильное регулярное выражение для правильногоматч?Или вот другое возможное решение.например на string.partition
?Мне открыты все возможные решения.