0

I have recieved array:

MultiDict({'data[0]': 'test', 'data[1]': 'test', 'data[2]': 'test', 'hash': 'b5a1f45733f0949ed80f1ef4eaef5454667e4eeb0b77233e15a796e6c91c088b'})

I need to iterate datas like php`s sorted array:

foreach ($_POST["data"] as $entry) {
    $hash .= $entry;
}

In php hash == 'testtesttest'

Trying

>>> keys = list(filter( lambda x: x.split('[')[0] == 'data', post.keys()))
>>> list(keys)
['data[0]', 'data[1]', 'data[2]']
>>> for x in keys:
...    print(int( x.split('[')[1].split(']')[0] ))
... 
0
1
2
>>> sorted(keys, key = lambda x : int( x.split('[')[1].split(']')[0] ))
['data[0]', 'data[1]', 'data[2]']
>>> for k in keys:
...     hash += post[k]
eri
  • 3,133
  • 1
  • 23
  • 35

1 Answers1

2

With sorted keys and str.startswith function:

# sample dict
d = {'data[2]': 'test2', 'data[1]': 'test1', 'data[10]': 'test10',
     'data[0]': 'test0', 'hash': 'b5a1f45733f0949ed80f1ef4eaef5454667e4eeb0b77233e15a796e6c91c088b'}

data = ''.join(d[k] for k in sorted((k_ for k_ in d.keys() if k_.startswith('data[')),
                                    key=lambda x: int(x.strip('data[]'))))
print(data)

The output:

test0test1test2test10
RomanPerekhrest
  • 88,541
  • 4
  • 65
  • 105