Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Process a dictionary of data about books, finding all numeric data, and converting each number to the equivalent in words
- # e.g. change 'Fahrenheit 451' to 'Fahrenheit four hundred and fifty one'
- # by Mike Kerry (acclivity2@gmail.com) 7-Jan-2022
- import re
- cybc = {"BookNumber": (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21),
- "BookNames": ('For Whom the Bell Tolls', 'Brave New World', 'Nineteen Eighty-Four',
- 'The Sound and the Fury', 'Gone with the Wind', "Lady Chatterley's Lover",
- 'The Hound of the Baskervilles', 'I Am Number 4', 'The Great Gatsby',
- 'The War of the Worlds', 'The Lord of the Rings', 'Martin Eden', 'On the Road',
- "A Room of One's Own", 'Lord Jim', 'Manhattan Transfer', "Sophie's Choice",
- 'The Catcher in the Rye', 'No Orchids For Miss Blandish',
- 'The Origins of Totalitarianism The Burden of Our Time', 'Fahrenheit 451'),
- "Pages": (None, 311, 328, 326, '1037 (first edition), 1024 (Warner Books Paperback)',
- None, None, 440, None, 287, 'original manuscripts, which total 9,250 pages',
- None, 320, 172, None, None, 562, 234, None, 704, 256),
- "Dates": (1940, 1932, 1949, 1929, 1936, 1928, '1901–02', 2009, 1925, 1898, '1954–55',
- 1909, 1957, 1929, 1900, 1925, 1979, 1951, 1939, 1951, 1953),
- "Author": ('Ernest Hemingway', 'Aldous Huxley', 'George Orwell', 'William Faulkner',
- 'Margaret Mitchell', 'D.H. Lawrence', 'Arthur Conan Doyle', 'Jobie Hughes, '
- 'James Frey', 'F. Scott Fitzgerald', 'H.G. Wells', 'J.R.R. Tolkien',
- 'Jack London', 'Jack Kerouac', 'Virginia Woolf', 'Joseph Conrad', 'John Dos Passos',
- 'William Styron', 'J.D. Salinger', 'James Hadley Chase', 'Hannah Arendt',
- 'Ray Bradbury')
- }
- # Replace this dummy function with your own integer-to-words function
- def num2words(n):
- return "ANUMBER"
- # This function processes all the data for one specific key of the dictionary
- def process_by_key(akey):
- items = cybc[akey] # extract the tuple of all the dictionary items for the given key
- newitems = [] # define an empty list that will hold the modified items
- for item in items:
- if isinstance(item, int): # process integers
- item = num2words(item) # replace the integer item with the equivalent words
- elif isinstance(item, str): # process strings
- # Examine string items for any embedded integers
- vlist = re.split('(\d+)', item) # Split on integers, preserving everything else too
- for x, part in enumerate(vlist): # Examine every part of the split-up string
- if part.isdigit(): # Look for parts that are digits only
- vlist[x] = num2words(int(part)) # Convert such parts to the word equivalence
- # Re-combine all the parts of the string item from vlist
- item = "".join(vlist)
- newitems.append(item) # Add the converted (or unchanged) item to our new list
- # re-insert the modified items into the dictionary
- cybc[akey] = tuple(newitems) # Convert our new list to a tuple and re-insert in the dictionary
- process_by_key("BookNumber") # Process all book numbers
- process_by_key("BookNames") # Process all the book names
- process_by_key("Pages") # Process all the pages
- process_by_key("Dates") # Process all the dates
- print(str(cybc)) # Dump out the modified dictionary
Add Comment
Please, Sign In to add comment