2

I've been working on a dictionaries exercise in Python, and I'm fairly new to the language and programming in itself. I've been trying to take a string or list of strings and have my code compare the first letter of the strings and make a dictionary out of how many strings begin with a certain letter of the alphabet. This is what I have so far:

  d = {}
text=["time","after","time"]
# count occurances of character
for w in text:

    d[w] = text.count(w)
# print the result
for k in sorted(d):
    print (k + ': ' + str(d[k]))

What I'm aiming for, is for example get the following result :

count_starts(["time","after","time"]) -->{'t':  2,  'a':    1}

But, what I'm getting is more like the following:

count_starts(["time","after","time"]) --> {time:2, after:1}

With what I have, I've been able to accomplish it counting how many times a whole unique string appears, just not the counting of JUST the first letter in the string.

I also tried the following:

d = {}
text=["time","after","time"]
# count occurances of character
for w in text:
    for l in w[:1]:
        d[l] = text.count(l)
# print the result
for k in sorted(d):
    print (k + ': ' + str(d[k]))

but all that give me in the printed output is :

{"a":0,"t":0}

I'm using Python Visualizer for my testing purposes.

smci
  • 32,567
  • 20
  • 113
  • 146
Nick
  • 97
  • 3
  • 11

2 Answers2

6

To count the number of occurrences of the first letter for each item in text:

from collections import Counter

text = ["time", "after", "time"]

>>> Counter(t[0] for t in text)
Counter({'a': 1, 't': 2})

or just getting the dictionary key/value pairs:

>>> dict(Counter(t[0] for t in text))
{'a': 1, 't': 2}
Alexander
  • 105,104
  • 32
  • 201
  • 196
2
d = {}

text = ['time', 'after', 'time']

for w in text:
    if w:                         # If we have the empty string. w[0] Does not Exist (DNE)
        if w[0] in d:             # Check to see if we have first character in dictionary.
            d[w[0]] = d[w[0]] + 1 # Use the first character as key to dictionary.
        else:                     # If character has not been found start counting.
            d[w[0]] = 1           # Use the first character as key to dictionary.

Using Python's IDLE I get:

>>> d = {}
>>> text = ['time', 'after', 'time']
>>> for w in text:
    if w:
        if w[0] in d:
            d[w[0]] = d[w[0]] + 1
        else:
            d[w[0]] = 1

>>> print d
{'a': 1, 't': 2}
>>> 
Matthew Hoggan
  • 7,402
  • 16
  • 75
  • 140
  • You can avoid the special-case logic with `defaultdict`, and in fact `Counter` implements that for the common case of an integer counter. – smci Oct 28 '16 at 01:04