为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用多个计数来制作字典

如何使用多个计数来制作字典

慕哥9229398 2021-07-08 14:11:22
这是一个很难问的问题。但是,到目前为止我有这个代码:#create the dictionary with the word profiles        for u in unique:            kw = u            count_word = [i for i in temp for j in i.split() if j == kw]            count_dict = {j: i.count(j) for i in count_word for j in i.split() if j != kw}            print(kw)            #format the dictionary            for a, c in sorted(count_dict.items(), key=lambda x: x[0]):                print('{}: {}'.format(a, c))            print()这正是我想要它做的,除了独特的词也需要一个计数器。在下面的示例中,我将 river 作为唯一词,它将遍历代码并与临时列表进行比较。它的输出如下:river (# This should be river: 4 not just river)atlantic: 1branch: 1commonplace: 1considering: 1contrary: 1country: 1cover: 1crookedest: 1crow: 1degrees: 1delaware: 1drainage-basin: 1draws: 1fly: 1forty-five: 1ground: 1idaho: 1journey: 1longest: 1longitude: 1main: 1miles: 1missouri: 1pacific: 1part: 1remarkable: 1safe: 1seaboard: 1seems: 1seventy-five: 1six: 1slope: 1spread: 1states: 1supply: 1territories: 1twenty-eight: 1uses: 1vast: 1water: 1ways: 1world: 1world--four: 1它看起来很棒,正是我想要做的。除了,看看列表顶部的河流如何没有计数?河流在文本中出现了 4 次,所以我想要一个唯一词的计数器来计算河流 4 次,同时仍然给我下面的输出。
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

您的解决方案,但它似乎太复杂了,多次存储行,然后构建字典理解,可能会覆盖键,丢失最终单词数并保留第一个单词数(即 1)。


有一种更短且防故障的方法:您想利用旧的collections.Counter,但仅限于某些词。


要构建此过滤计数器,请对单词进行迭代,但使用您的唯一列表将它们过滤掉(set您构建的非常有效地过滤掉不需要的单词,让我们保留它):


import collections


c = collections.Counter(word for line in temp for word in line.split() if word in unique)

然后打印它们,排序:


for word,count in sorted(c.items()):

    print("{}: {}".format(word,count))

打印(摘录):


...

reading: 1

receives: 1

region: 1

remarkable: 1

rhine: 1

river: 4

rivers: 1

safe: 1

scotland: 1

seaboard: 1

...


查看完整回答
反对 回复 2021-07-13
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

import collections


temp = ['mississippi worth reading about', ' commonplace river contrary ways remarkable', ' considering missouri main branch longest river world--four miles', ' seems safe crookedest river world part journey uses cover ground crow fly six seventy-five', ' discharges water st', ' lawrence twenty-five rhine thirty-eight thames', ' river vast drainage-basin draws water supply twenty-eight states territories delaware atlantic seaboard country idaho pacific slope spread forty-five degrees longitude', ' mississippi receives carries gulf water fifty-four subordinate rivers navigable steamboats hundreds navigable flats keels', ' area drainage-basin combined areas england wales scotland ireland france spain portugal germany austria italy turkey almost wide region fertile mississippi valley proper exceptionally so']

one_big_string="".join(temp)


print(collections.Counter(one_big_string.split()))

Counter({'river': 4, 'mississippi': 3, 'water': 3, 'drainage-basin': 2, 'navigable': 2, 'worth': 1, 'reading': 1, 'about' : 1, 'commonplace': 1, 'contrary': 1, 'ways': 1, 'remarkable': 1, '考虑': 1, 'missouri': 1, 'main': 1, 'branch': 1 , 'longest': 1, 'world--four': 1, 'miles': 1, 'seems': 1, 'safe': 1, 'crookedest': 1, 'world': 1, 'part': 1、'旅程':1、'用途':1、'覆盖':1、'地面':1、'乌鸦':1、'飞':1、'六':1、'七十五': 1,'放电':1,'st':1,'劳伦斯':1,'二十五':1,'莱茵':1,'三十八':1,'thames': 1, 'vast': 1, 'draws': 1, 'supply': 1, 't28': 1, 'states': 1, 'territories': 1, 'delaware': 1, 'atlantic': 1, 'seaboard': 1, 'country': 1, 'idaho': 1, 'pacific': 1, 'slope': 1, 'spread': 1, '45': 1, 'degrees': 1, 'longitude': 1, 'receives': 1, 'carries': 1, 'gulf': 1, '54': 1, 'subordinate': 1, 'rivers': 1, 'steamboats': 1, 'hunreds': 1, 'flats': 1, '龙骨': 1, 'area': 1, 'combined': 1, 'areas': 1, 'england': 1, 'wales ': 1, '苏格兰': 1, '爱尔兰': 1, '法国': 1, '西班牙': 1, '葡萄牙': 1, '德国':1,'奥地利':1,'意大利':1,'土耳其':1,'几乎':1,'宽':1,'地区':1,'肥沃':1,'山谷' : 1, 'proper': 1, '异常': 1, 'so': 1})


查看完整回答
反对 回复 2021-07-13
?
浮云间

TA贡献1829条经验 获得超4个赞

temp = ['mississippi worth reading about', ' commonplace river contrary ways remarkable', ' considering missouri main branch longest river world--four miles', ' seems safe crookedest river world part journey uses cover ground crow fly six seventy-five', ' discharges water st', ' lawrence twenty-five rhine thirty-eight thames', ' river vast drainage-basin draws water supply twenty-eight states territories delaware atlantic seaboard country idaho pacific slope spread forty-five degrees longitude', ' mississippi receives carries gulf water fifty-four subordinate rivers navigable steamboats hundreds navigable flats keels', ' area drainage-basin combined areas england wales scotland ireland france spain portugal germany austria italy turkey almost wide region fertile mississippi valley proper exceptionally so']

unique = {'longest', 'considering', 'receives', 'water', 'discharges', 'atlantic', 'austria', 'part', 'idaho', 'main', 'drainage-basin', 'st', 'twenty-five', 'seventy-five', 'slope--a', 'world--four', 'remarkable', 'rivers', 'country', 'crookedest', 'areas', 'ireland', 'fifty-four', 'portugal', 'valley', 'france', 'almost', 'branch', 'twenty-eight', 'fertile', 'england', 'crow', 'spread', 'italy', 'journey', 'germany', 'river', 'draws', 'exceptionally', 'scotland', 'fly', 'uses', 'supply', 'region', 'rhine', 'ground', 'thirty-eight', 'thames', 'pacific', 'degrees', 'mississippi', 'lawrence', 'six', 'cover', 'subordinate', 'flats', 'navigable', 'area', 'proper', 'states', 'safe', 'wide', 'territories', 'vast', 'hundreds', 'contrary', 'missouri', 'commonplace', 'gulf', 'worth', 'seaboard', 'steamboats', 'wales', 'turkey', 'combined', 'delaware', 'forty-five', 'carries', 'seems', 'reading', 'keels', 'longitude', 'spain', 'ways'}

words = dict(zip(list(unique), [0 for i in unique]))

for str in temp:

    for w in str.split():

        if w in unique:

            words[w] += 1


for a in sorted(words):

    print('{}: {}'.format(a, words[a]))


查看完整回答
反对 回复 2021-07-13
  • 3 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信