Search code examples
python-3.xjquery-ui-sortablesortingsortedlist

Ignoring quotes while sorting lists in Python?


I am making a program to read from a file, alphabetize the info, and paste it into an output.. The only issue I am having is in the information that begins with quotes ("").

The main function for the program is to auto-sort MLA works cited pages (for fun obviously).

Here is the code... I would love any criticism, suggestions, opinions (Please keep in mind this is my first functioning program)

TL;DR -- How to ignore " 's and still alphabetize the data based on the next characters..

Code:

import os, sys

#List for text
mainlist = []
manlist = []

#Definitions
def fileread():
  with open("input.txt", "r+") as f:
    for newline in f:
      str = newline.replace('\n', '')
      #print(str)
      manlist.append(str)
  mansort(manlist)
  #print("Debug")
  #print(manlist)

def main():
  print("Input Data(Type 'Done' When Complete or Type 'Manual' For file-read):")
  x = input()
  if x.lower() == 'done':
    sort(mainlist)
  elif x == '':
    print("You must type something!")
    main()
  elif x.lower() == 'manual':
    fileread()
  else:
    mainlist.append(x)
    main()


def mansort(manlist):
  print("What would you like to name the file?(Exit to Terminate):") 
  filename = input()
  manlist = sorted(manlist, key=str.lower)
  for s in manlist:
    finalstring2 = '\n'.join(str(manlist) for manlist in manlist)
  if filename == '':
    print("You must choose a name!")
  elif filename.lower() == 'exit':
sys.exit()
  else:
    with open(filename + ".txt", "w+") as f:
      f.write(str(finalstring2))


def sort(mainlist):
  os.system("cls")
  mainlist = sorted(mainlist, key=str.lower)
  for s in mainlist:
    finalstring = '\n'.join(str(mainlist) for mainlist in mainlist)
  print(finalstring)

  print("What would you like to name the file?(Exit to Terminate):") 
  filename = input()

  if filename.lower() == 'exit':
    sys.exit()
  elif  filename == '':
    print("You must type something!")
    sort(mainlist)
  else:
    with open(filename + ".txt", "w+") as f:
      f.write(str(finalstring))

  print("\nPress Enter To Terminate.")
  c = input()


main()


#Clears to prevent spam.
os.system("cls")

Please keep all criticism constructive... Also, just as an example, I want "beta" to come after alpha, but with my current program, it will come first due to "" 's


Solution

  • sorted(mainlist, key=str.lower)
    

    You've already figured out that you can perform some transformation on each item on mainlist, and sort by that "mapped" value. This technique is sometimes known as a Schwartzian Transform.

    Just go one step further - remove the quotes and convert it to lower case.

    sorted(mainlist, key=lambda s: s.strip('"').lower())