Bottom Page

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
 How to make this dictionary-generating code more efficient?
My code below works. I used a second variable (count) to generate the dictionary. How could I have done this more efficiently?

import random
str = "abcdefg"
print(' This program randomly generates a cipher dictionary from the string',str,end="")
print(' Cipher dictionary is:')

def make_cipher_dict(str):
    CIPHER_DICT = {}
    lst = list(str)
    sndlst = list(str)
    random.shuffle(sndlst) #random method changes specified list rather than creating new list
#    print(lst)  DEBUG
#    print(sndlst)  DEBUG
#    quit()  DEBUG
    count = 0
    for a in lst:
        CIPHER_DICT[a] = sndlst[count]
        count = count + 1

Don't name variables str. There is a built-in function named str, and naming your variable str blocks access to it.

As to efficiency, get rid of count. You're not using it for anything, why are you calculating it? Have you learned zip yet? If so, it can be used to efficiently make a dictionary. The dictionary docs have examples.
Craig "Ichabod" O'Brien -
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures

Delete line 9 (if you do the rest below)
Delete lines 13-16
Change 17 to
cipher_dict = {a:b for (a,b) in zip(sndlst,str)}
though I agree with not using str as a variable.
Delete 18-20, move the print statement to after line 23 (style issue - your function is called make_cipher_dict, not print it, so would change 21 to return the dictionary and print it from the main program. That makes the function much more re-usable)
I'm not sure a dict comprehension is more efficient than the dict constructor that I was talking about.
Craig "Ichabod" O'Brien -
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures

Thank you!

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  John Guttag Book - Finger Exercise 4 - need help to make the code better pritesh 12 3,396 May-06-2020, 05:10 PM
Last Post: riteshp
  Creating code to make up to 4 turtle move simultaneously in a random heading J0k3r 3 1,539 Mar-05-2018, 03:48 PM
Last Post: mpd
  How to make faster this code Ace 1 1,160 Oct-23-2017, 12:11 PM
Last Post: Larz60+
  How can I make faster that code BlueEva00 1 984 Oct-18-2017, 03:51 PM
Last Post: ichabod801

Forum Jump:

Users browsing this thread: 1 Guest(s)