擅长:python、mysql、java
<pre><code>from collections import Counter
TEXT = '''
Blah Tim blah blah Timmy blah Timster blah Tim
Blah Bill blah blah William blah Billy blah Bill Bill
'''
words = TEXT.split()
# Base names a their aliases.
ALIASES = dict(
Tim = {'Tim', 'Timmy', 'Timster'},
Bill = {'Bill', 'William', 'Billy'},
)
# Given any name, find its base name.
BASE_NAMES = {a : nm for nm, aliases in ALIASES.items() for a in aliases}
# All names.
ALL_NAMES = set(nm for aliases in ALIASES.values() for nm in aliases)
# Count up all names.
detailed_tallies = Counter(w for w in words if w in ALL_NAMES)
# Then build the summary counts from those details.
summary_tallies = Counter()
for nm, n in detailed_tallies.items():
summary_tallies[BASE_NAMES[nm]] += n
print(detailed_tallies)
print(summary_tallies)
# Counter({'Bill': 3, 'Tim': 2, 'Timmy': 1, 'Timster': 1, 'William': 1, 'Billy': 1})
# Counter({'Bill': 5, 'Tim': 4})
</code></pre>