How to combine like elements in list?
Question:
I’m trying to reorganize my list according to its peers.
I have this list:
['datetime', 'INMET_BRASILIA_A001_M-DVENTO', 'INMET_BRASILIA_A001_M-PREC_MM', 'INMET_BRASILIA_A001_M-PRESS_HPA', 'INMET_CURITIBA_A807_M-DVENTO', 'INMET_CURITIBA_A807_M-PREC_MM', 'INMET_CURITIBA_A807_M-PRESS_HPA']
and i want to do something like this:
['datetime', 'INMET_BRASILIA_A001_M-DVENTO', 'INMET_CURITIBA_A807_M-DVENTO', 'INMET_BRASILIA_A001_M-PREC_MM', 'INMET_CURITIBA_A807_M-PREC_MM', 'INMET_BRASILIA_A001_M-PRESS_HPA', 'INMET_CURITIBA_A807_M-PRESS_HPA']
the element ‘datetime’ must be the first element in list, but i think i can do this after reordered list
Answers:
Full Code
data = ['datetime', 'INMET_BRASILIA_A001_M-DVENTO', 'INMET_CURITIBA_A807_M-DVENTO', 'INMET_BRASILIA_A001_M-PREC_MM',
'INMET_CURITIBA_A807_M-PREC_MM', 'INMET_BRASILIA_A001_M-PRESS_HPA', 'INMET_CURITIBA_A807_M-PRESS_HPA']
data.remove("datetime") # removing datetime as it is the odd one in the list
data = sorted(data, key=lambda x: x.split("-")[-1])# sorting based on the last element ie. element after '-'
data.insert(0, "datetime") # Inserting the odd element 'datetime' back
print(data)
Output
['datetime', 'INMET_BRASILIA_A001_M-DVENTO', 'INMET_CURITIBA_A807_M-DVENTO', 'INMET_BRASILIA_A001_M-PREC_MM', 'INMET_CURITIBA_A807_M-PREC_MM', 'INMET_BRASILIA_A001_M-PRESS_HPA', 'INMET_CURITIBA_A807_M-PRESS_HPA']
Hope this helps. happy Coding 🙂
If the last "word" is prefixed by hyphen then:
indata = ['datetime', 'INMET_BRASILIA_A001_M-DVENTO', 'INMET_BRASILIA_A001_M-PREC_MM', 'INMET_BRASILIA_A001_M-PRESS_HPA', 'INMET_CURITIBA_A807_M-DVENTO', 'INMET_CURITIBA_A807_M-PREC_MM', 'INMET_CURITIBA_A807_M-PRESS_HPA']
print([indata[0]] + sorted(indata[1:], key=lambda e: e.split('-')[-1]))
Output:
['datetime', 'INMET_BRASILIA_A001_M-DVENTO', 'INMET_CURITIBA_A807_M-DVENTO', 'INMET_BRASILIA_A001_M-PREC_MM', 'INMET_CURITIBA_A807_M-PREC_MM', 'INMET_BRASILIA_A001_M-PRESS_HPA', 'INMET_CURITIBA_A807_M-PRESS_HPA']
I’m trying to reorganize my list according to its peers.
I have this list:
['datetime', 'INMET_BRASILIA_A001_M-DVENTO', 'INMET_BRASILIA_A001_M-PREC_MM', 'INMET_BRASILIA_A001_M-PRESS_HPA', 'INMET_CURITIBA_A807_M-DVENTO', 'INMET_CURITIBA_A807_M-PREC_MM', 'INMET_CURITIBA_A807_M-PRESS_HPA']
and i want to do something like this:
['datetime', 'INMET_BRASILIA_A001_M-DVENTO', 'INMET_CURITIBA_A807_M-DVENTO', 'INMET_BRASILIA_A001_M-PREC_MM', 'INMET_CURITIBA_A807_M-PREC_MM', 'INMET_BRASILIA_A001_M-PRESS_HPA', 'INMET_CURITIBA_A807_M-PRESS_HPA']
the element ‘datetime’ must be the first element in list, but i think i can do this after reordered list
Full Code
data = ['datetime', 'INMET_BRASILIA_A001_M-DVENTO', 'INMET_CURITIBA_A807_M-DVENTO', 'INMET_BRASILIA_A001_M-PREC_MM',
'INMET_CURITIBA_A807_M-PREC_MM', 'INMET_BRASILIA_A001_M-PRESS_HPA', 'INMET_CURITIBA_A807_M-PRESS_HPA']
data.remove("datetime") # removing datetime as it is the odd one in the list
data = sorted(data, key=lambda x: x.split("-")[-1])# sorting based on the last element ie. element after '-'
data.insert(0, "datetime") # Inserting the odd element 'datetime' back
print(data)
Output
['datetime', 'INMET_BRASILIA_A001_M-DVENTO', 'INMET_CURITIBA_A807_M-DVENTO', 'INMET_BRASILIA_A001_M-PREC_MM', 'INMET_CURITIBA_A807_M-PREC_MM', 'INMET_BRASILIA_A001_M-PRESS_HPA', 'INMET_CURITIBA_A807_M-PRESS_HPA']
Hope this helps. happy Coding 🙂
If the last "word" is prefixed by hyphen then:
indata = ['datetime', 'INMET_BRASILIA_A001_M-DVENTO', 'INMET_BRASILIA_A001_M-PREC_MM', 'INMET_BRASILIA_A001_M-PRESS_HPA', 'INMET_CURITIBA_A807_M-DVENTO', 'INMET_CURITIBA_A807_M-PREC_MM', 'INMET_CURITIBA_A807_M-PRESS_HPA']
print([indata[0]] + sorted(indata[1:], key=lambda e: e.split('-')[-1]))
Output:
['datetime', 'INMET_BRASILIA_A001_M-DVENTO', 'INMET_CURITIBA_A807_M-DVENTO', 'INMET_BRASILIA_A001_M-PREC_MM', 'INMET_CURITIBA_A807_M-PREC_MM', 'INMET_BRASILIA_A001_M-PRESS_HPA', 'INMET_CURITIBA_A807_M-PRESS_HPA']