For loop stops adding items and values to a dictionary after first iteration
I want to split the word in half and calculate the occurrence of each letter in the word and insert the score in dictionary the output should be like this:
word
: aaazzbbb
dict1
: first half of the word
{'a': 3,'z': 1}
The issue is that the adding stops
dict2
: the second half
{'b': 3,'z': 1}
As it seems to stop adding items to the dictionary after the first iteration with the for
loop which is very strange.
Below is my function and what it gives:
def pal2(word):
wordLength = len(word)
word1 = ""
word2 = ""
midstr = ""
dict1 = []
dict2 = []
if (wordLength % 2 == 0 ):
for i in range(int((len(word)/2)-1),-1,-1):
word1 += word[i]
if (word[i] not in dict1):
dict1 = {word[i]:word.count(word[i],0,int((len(word)/2)-1))}
for j in range(int((len(word)/2)),len(word),+1):
word2 += word[j]
if (word[j] not in dict2):
dict2 = {word[j]:word.count(word[j],int((len(word) / 2) - 1), len(word))}
This is what it gives:
{'a': 3}, {'b': 3}
As you can see only the first letters are inserted.
You have many problems with your code, I have fixed some of them to make it work:
- You initialize
dict1
anddict2
likelists
, notdicts
. - On each
for
loop iteration you fully override your dict, so you have only one key in the result.
dict1 = {word[i]:word.count(word[i],0,int((len(word)/2)-1))}
- You use incorrect indexes in
count
function. You have to use
word.count(word[i], 0, int((len(word) / 2)))
instead of
word.count(word[i],0,int((len(word)/2)-1))
and
word.count(word[j], int((len(word) / 2)), len(word))
instead of
word.count(word[j],int((len(word) / 2) - 1), len(word))
- Variable in function should be lowercase, so I replaced
wordLength
withword_length
. You have to stick to those standards to increase code readability. - Fixed some other code style issues.
def pal2(word):
word_length = len(word)
word1 = ""
word2 = ""
dict1 = {}
dict2 = {}
if word_length % 2 == 0:
for i in range(int((len(word) / 2) - 1), -1, -1):
word1 += word[i]
if word[i] not in dict1:
dict1[word[i]] = word.count(word[i], 0, int((len(word) / 2)))
for j in range(int((len(word) / 2)), len(word), 1):
word2 += word[j]
if word[j] not in dict2:
dict2[word[j]] = word.count(word[j], int((len(word) / 2)), len(word))
print(dict1)
print(dict2)
pal2("aaazzbbb")
Output:
{'z': 1, 'a': 3}
{'z': 1, 'b': 3}
Instead of creating a dictionary each time, you need to update your initial dictionary.
To explain, first you have to create an empty dictionary:
dict1 = {}
Then, we replace this code, where you are creating a completely new dictionary:
dict1 = {word[i]:word.count(word[i],0,int((len(word)/2)-1))}
By this (update original dictionary, to include existing elements):
dict1.update({word[i]:word.count(word[i],0,int((len(word)/2)))})
Check the update method.