如何按频率对词典进行排序并只打印前10个结果?

2024-10-01 11:31:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个函数,从一个文本文件中获取纽约市排名靠前的狗名,并打印排名前10位的狗名。你知道吗

这是我的密码:

    for line in inputFile:
        fields = line.split("\t")
        nameList.append(fields[0])

    nameDict = {}

    for name in nameList:
        if name not in nameDict:
            nameDict[name] = 1
        else:
            nameDict[name] += 1

    keyList = []

    for name in nameDict:
        keyList.append(name)

    keyList.sort()

    for name in keyList:
        print(name, nameDict[name])

以下是文本文件的示例:

狗名性别品种出生主要颜色次要颜色第三颜色spayed或neutered guard或trained borough邮编
Buddy M Afghanian Hound Jan-00 BRINDLE BLACK n/a是否曼哈顿10003
Nicole F Afghanian Hound Jul-00黑色不适用不适用是否曼哈顿10021

我的代码现在是这样的:

"Keaton," 1
"Lady,Princess,Prescott" 1
"cathalina," 1
A. 1
A.A. 1
ABBA 1
ABBESS 1
ABBEYROAD 1
ABERCROMBIE 1
ABIGALE 1

Tags: 函数namein密码fieldsfor颜色line
1条回答
网友
1楼 · 发布于 2024-10-01 11:31:59

这可能有点过分,但您可以导入到数据帧中并使用value\u counts()。这也会简化文件IO。你知道吗

假设Python 3x

import pandas as pd 

df = pd.read_csv(filename,delim_whitespace=True, index_col=False)
print(df['dog_name'].value_counts()[:10])

将打印出十大最受欢迎的狗名。你知道吗

我编造了一些数据:

dog_name gender breed birth dominant_color secondary_color third_color spayed_or_neutered guard_or_trained borough zip_code
Buddy M Afghan Hound Jan-00 BRINDLE BLACK n/a Yes No Manhattan 10003
Nicole F Afghan Hound Jul-00 BLACK n/a n/a Yes No Manhattan 10021
Keaton F Afghan Hound Jul-00 BLACK n/a n/a Yes No Manhattan 10021
Princess F Afghan Hound Jul-00 BLACK n/a n/a Yes No Manhattan 10021
Keaton F Afghan Hound Jul-00 BLACK n/a n/a Yes No Manhattan 10021
Prescott F Afghan Hound Jul-00 BLACK n/a n/a Yes No Manhattan 10021
Prescott F Afghan Hound Jul-00 BLACK n/a n/a Yes No Manhattan 10021
Prescott F Afghan Hound Jul-00 BLACK n/a n/a Yes No Manhattan 10021
Prescott F Afghan Hound Jul-00 BLACK n/a n/a Yes No Manhattan 10021

上面的代码给出

Prescott    4
Keaton      2
Nicole      1
Princess    1
Buddy       1
Name: dog_name, dtype: int64

相关问题 更多 >