Parsing DeepDiff result
<p>I am working with <a href="http://deepdiff.readthedocs.io/en/latest/" rel="nofollow">DeepDiff</a>. So I have results like:</p>

<pre><code>local =  [{1: {'age': 50, 'name': 'foo'}}, {2: {'age': 90, 'name': 'bar'}}, {3: {'age': 60, 'name': 'foobar'}}]
online = [{1: {'age': 50, 'name': 'foo'}}, {2: {'age': 40, 'name': 'bar'}}]
ddiff = DeepDiff(local, online)
added, updated = ddiff['iterable_item_added'], ddiff['values_changed']
added = {'root[2]': {3: {'age': 60, 'name': 'foobar'}}}
updated = {"root[1][2]['age']": {'new_value': 90, 'old_value': 40}}
</code></pre>

<p>Now, I want to take:</p>

<pre><code>list_indexes_added = foo(added)
list_indexes_updated = foo(updated)
</code></pre>

<p>and to obtain:</p>

<pre><code>list_indexes_added = [2]
list_index_updated = [(1,2,'age')]
</code></pre>

<p>in this way, I can manipulate the list <code>local</code> and <code>online</code> and in the future update the <code>online</code> table.</p>

<p>I am thinking in regexs, but maybe there is other option.</p>

<ul>
<li><p>One solution can be regex and custom parsing of the matches.</p></li>
<li><p>Another can be using <code>literal_eval</code> after regex parsing on these strings, if the output format of <code>deepdiff</code> is consistent</p>

<pre><code>from ast import literal_eval
import re


def str_diff_parse(str_diff):
    return [tuple(literal_eval(y) for y in re.findall(r"\[('?\w+'?)\]", x)) for x in str_diff]

added = {'root[2]': {3: {'age': 60, 'name': 'foobar'}}}
updated = {"root[1][2]['age']": {'new_value': 90, 'old_value': 40}}

list_indexes_added = str_diff_parse(added)
list_indexes_updated = str_diff_parse(updated)

print(list_indexes_added)
print(list_indexes_updated)
# prints
#[(2,)]
#[(1, 2, 'age')]
</code></pre></li>
</ul>

<p><strong>demo</strong> : <a href="http://ideone.com/3MhTky" rel="nofollow">http://ideone.com/3MhTky</a></p>

<ul>
<li>Would also recommend <a href="https://github.com/inveniosoftware/dictdiffer" rel="nofollow">dictdiffer</a> module, it returns the diff as a consumable python diff object which can be patched to original dictionary to get the updated one or vice versa.</li>
</ul>

python regex algorithm diff