Reputation: 473
I have some inherited code that works in other scenarios but is not working in this current application...
I have the following input:
import itertools
split_into_tables = [['abc=0', 'def=0', 'imsi=0', 'kekri=1234567890', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9'], ['abc=0', 'def=0', 'imsi=0', 'kekri=NA', 'sum=asdf', 'origin=source', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9'], ['addkik=BasdferySaver', 'addpop=false', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=device_id', 'addpop=F309387C-AAF5-478D-95A2-28E9B46105C7', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=tmgfd', 'addpop=fixed_ap', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=jej_unified', 'addpop=false', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=internalversion', 'addpop=19.1.0.12', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=version', 'addpop=3.11.0', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=carrierid', 'addpop=AT&T', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=activecarrierid', 'addpop=0', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=UserConsent', 'addpop=yes', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=idk', 'addpop=2019-07-02T14:28:48+0000', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=ieir', 'addpop=sdfhs', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT']]
The following code should alphabetize every nested list based on the first string before the '=', and then after doing so, split the strings into 2 (string before and the string after the '=').
e=0
while e < len(split_into_tables):
if split_into_tables[e] == ['No result found=No result found']:
e = e+1
else:
si = iter(split_into_tables[e])
split_into_tables[e] = ['='.join(each) for each in itertools.izip(si, si)]
e = e+1
e_ = 0
while e_ < len(split_into_tables):
split_into_tables[e_] = sorted(split_into_tables[e_], key=str.lower)
e_ = e_+1
split_into_tables_alpha = [sum([x.split('=') for x in sublist], []) for sublist in split_into_tables]
But this is the output I am getting:
split_into_tables_alpha = [['abc', '0', 'def', '0', 'imsi', '0', 'kekri', '1234567890', 'sum', 'asdf', 'origin', 'd1'], ['abc', '0', 'def', '0', 'imsi', '0', 'kekri', 'NA', 'origin', 'source', 'sID', 'FD330AD9-1FEB-4A33-BC0F-CF760AE203E9'], ['addkik', 'BasdferySaver', 'addpop', 'false', 'gjk', 'EDT', 'origin', 'd1', 'sID', 'FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'sum', 'asdf'], ['addkik', 'device_id', 'addpop', 'F309387C-AAF5-478D-95A2-28E9B46105C7', 'gjk', 'EDT', 'origin', 'd1', 'sID', 'FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'sum', 'asdf'], ['addkik', 'tmgfd', 'addpop', 'fixed_ap', 'gjk', 'EDT', 'origin', 'd1', 'sID', 'FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'sum', 'asdf'], ['addkik', 'jej_unified', 'addpop', 'false', 'gjk', 'EDT', 'origin', 'd1', 'sID', 'FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'sum', 'asdf'], ['addkik', 'internalversion', 'addpop', '19.1.0.12', 'gjk', 'EDT', 'origin', 'd1', 'sID', 'FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'sum', 'asdf'], ['addkik', 'version', 'addpop', '3.11.0', 'gjk', 'EDT', 'origin', 'd1', 'sID', 'FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'sum', 'asdf'], ['addkik', 'carrierid', 'addpop', 'AT&T', 'gjk', 'EDT', 'origin', 'd1', 'sID', 'FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'sum', 'asdf'], ['addkik', 'activecarrierid', 'addpop', '0', 'gjk', 'EDT', 'origin', 'd1', 'sID', 'FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'sum', 'asdf'], ['addkik', 'UserConsent', 'addpop', 'yes', 'gjk', 'EDT', 'origin', 'd1', 'sID', 'FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'sum', 'asdf'], ['addkik', 'idk', 'addpop', '2019-07-02T14:28:48+0000', 'gjk', 'EDT', 'origin', 'd1', 'sID', 'FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'sum', 'asdf'], ['addkik', 'ieir', 'addpop', 'sdfhs', 'gjk', 'EDT', 'origin', 'd1', 'sID', 'FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'sum', 'asdf']]
And this output is missing some of the elements that were in the original list, but it always turns out to be the last element in the nested list (if a value is in fact dropped). For instance, in the first nested list, 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9' should have been broken into 'sID' and 'FD330AD9-1FEB-4A33-BC0F-CF760AE203E9' (which alphabetically, would have occurred last in the output), but it was dropped altogether...
Any ideas?
Upvotes: 0
Views: 33
Reputation: 3807
This includes the values after the equals sign. Itertools.chain(..)
flattens the list after making 2 element lists from the split function.
[list(itertools.chain(*sorted([inner.split("=") for inner in outer]))) for outer in split_into_tables]
Upvotes: 1
Reputation: 5785
>>> split_into_tables = [['abc=0', 'def=0', 'imsi=0', 'kekri=1234567890', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9'], ['abc=0', 'def=0', 'imsi=0', 'kekri=NA', 'sum=asdf', 'origin=source', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9'], ['addkik=BasdferySaver', 'addpop=false', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=device_id', 'addpop=F309387C-AAF5-478D-95A2-28E9B46105C7', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=tmgfd', 'addpop=fixed_ap', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=jej_unified', 'addpop=false', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=internalversion', 'addpop=19.1.0.12', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=version', 'addpop=3.11.0', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=carrierid', 'addpop=AT&T', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=activecarrierid', 'addpop=0', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=UserConsent', 'addpop=yes', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=idk', 'addpop=2019-07-02T14:28:48+0000', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT'], ['addkik=ieir', 'addpop=sdfhs', 'sum=asdf', 'origin=d1', 'sID=FD330AD9-1FEB-4A33-BC0F-CF760AE203E9', 'gjk=EDT']]
Output:
>>> sorted([[ei.split("=")[0] for ei in e ]for e in split_into_tables ])
[['abc', 'def', 'imsi', 'kekri', 'sum', 'origin', 'sID'], ['abc', 'def',
'imsi', 'kekri', 'sum', 'origin', 'sID'], ['addkik', 'addpop', 'sum', 'origin',
'sID', 'gjk'], ['addkik', 'addpop', 'sum', 'origin', 'sID', 'gjk'], ['addkik',
'addpop', 'sum', 'origin', 'sID', 'gjk'], ['addkik', 'addpop', 'sum', 'origin',
'sID', 'gjk'], ['addkik', 'addpop', 'sum', 'origin', 'sID', 'gjk'], ['addkik',
'addpop', 'sum', 'origin', 'sID', 'gjk'], ['addkik', 'addpop', 'sum', 'origin',
'sID', 'gjk'], ['addkik', 'addpop', 'sum', 'origin', 'sID', 'gjk'], ['addkik',
'addpop', 'sum', 'origin', 'sID', 'gjk'], ['addkik', 'addpop', 'sum', 'origin',
'sID', 'gjk'], ['addkik', 'addpop', 'sum', 'origin', 'sID', 'gjk']]
Upvotes: 1