I would like to see the ability to sort a string that has numbers at the beginning as a Number.i.e. I have addresses 1 Main Street, 10 Main Street, 2 Main Street. It is going to sort them in that order.
Until such time that this happens... You can do it with a field calculator expression in the interim if you are in a pinch
Create them correctly in the first place
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">nat_pad</SPAN><SPAN class="punctuation token">(</SPAN>val<SPAN class="punctuation token">,</SPAN> pad<SPAN class="operator token">=</SPAN><SPAN class="string token">'0000'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"""natural sort... put the import re outside of the function :if using the field calculator : calculator expression- nat_pad(!data_field!, pad='a bunch of 0s') """</SPAN> <SPAN class="keyword token">import</SPAN> re txt <SPAN class="operator token">=</SPAN> re<SPAN class="punctuation token">.</SPAN>split<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'([0-9]+)'</SPAN><SPAN class="punctuation token">,</SPAN> val<SPAN class="punctuation token">)</SPAN> l_val <SPAN class="operator token">=</SPAN> len<SPAN class="punctuation token">(</SPAN>str<SPAN class="punctuation token">(</SPAN>val<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> txt_out <SPAN class="operator token">=</SPAN> <SPAN class="string token">"{}{}{}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>txt<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> pad<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="operator token">-</SPAN>l_val<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> txt<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">return</SPAN> txt_out a <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">'a1'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a20'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a2'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a10'</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"input - \n{}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> vals <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN>nat_pad<SPAN class="punctuation token">(</SPAN>i<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> i <SPAN class="keyword token">in</SPAN> a<SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"output - \n{}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>vals<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> input <SPAN class="operator token">-</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">'a1'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a20'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a2'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a10'</SPAN><SPAN class="punctuation token">]</SPAN> output <SPAN class="operator token">-</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">'a001'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a020'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a002'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a010'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Then sort
b <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">'a001'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a020'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a002'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a010'</SPAN><SPAN class="punctuation token">]</SPAN> b<SPAN class="punctuation token">.</SPAN>sort<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> b <SPAN class="punctuation token">[</SPAN><SPAN class="string token">'a001'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a002'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a010'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a020'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Sort them if they aren't
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">natsort</SPAN><SPAN class="punctuation token">(</SPAN>text_lst<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"""natural sort returns text containing numbers sorted considering the : number in the sequence. :originals used lambda expressions : convert = lambda text: int(text) if text.isdigit() else text : a_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)] """</SPAN> <SPAN class="keyword token">import</SPAN> re <SPAN class="keyword token">def</SPAN> <SPAN class="token function">convert</SPAN><SPAN class="punctuation token">(</SPAN>text<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">return</SPAN> int<SPAN class="punctuation token">(</SPAN>text<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">if</SPAN> text<SPAN class="punctuation token">.</SPAN>isdigit<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">else</SPAN> text <SPAN class="keyword token">def</SPAN> <SPAN class="token function">a_key</SPAN><SPAN class="punctuation token">(</SPAN>key<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">return</SPAN> <SPAN class="punctuation token">[</SPAN>convert<SPAN class="punctuation token">(</SPAN>c<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> c <SPAN class="keyword token">in</SPAN> re<SPAN class="punctuation token">.</SPAN>split<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'([0-9]+)'</SPAN><SPAN class="punctuation token">,</SPAN> key<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">return</SPAN> sorted<SPAN class="punctuation token">(</SPAN>text_lst<SPAN class="punctuation token">,</SPAN> key<SPAN class="operator token">=</SPAN>a_key<SPAN class="punctuation token">)</SPAN> a <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">'a1'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a20'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a2'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a10'</SPAN><SPAN class="punctuation token">]</SPAN> vals <SPAN class="operator token">=</SPAN> natsort<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"natural sort - \n{}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>vals<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> natural sort <SPAN class="operator token">-</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">'a1'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a2'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a10'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a20'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Faça login para postar, seguir conteúdo e mais. Novo aqui? Registre-se gratuitamente.