繁体   English   中英

Python字典计数器位置变化

[英]Python dictionary counter positions change

所以我试图计算文本文件中重复次数最多的值。 通过使用Counter方法,它会返回我正在寻找的内容

文件.txt

12334
99965
99965
44144
99965
00000
44144

脚本文件

pArray=[]
with open("file.txt") as my_file:
        for line in my_file:
             pArray.append((line.split('\n'))[0])
        dictn = Counter(pArray)
        print(dictn)
        for key, value in dictn.items():
                print("KEY",key)    
                print("VALUE",value)
        print(dictn)

输出

Counter({'99965': 3, '44144': 2, '12334': 1, '00000': 1})
KEY 12334
VALUE 1
KEY 99965
VALUE 3
KEY 44144
VALUE 2
KEY 00000
VALUE 1
['12334', '99965', '44144', '00000']

但是正如您所看到的,最终数组的输出与字典的顺序不同
value应按降序排列)

我期待像这样的输出

 ['99965', '44144', '12334', '00000']

我也试过list(dictn.keys())但我得到了相同的输出:/
为什么订单会发生变化,我该如何解决?

文档中,我们看到Counter对象:是“无序集合”——很像dictionaries (实际上它们是一个子类)。 所以这意味着迭代.items()不会按大小顺序给出元素。

但是,我们可以简单地使用.most_common返回一个元组列表- 每个包含一个元素及其计数。 最重要的是它是有序的。

所以我们需要做的就是使用list-comprehension来提取返回列表中每个元组的第一个元素。 这可以通过以下方式完成:

[t[0] for t in dictn.most_common()]

这给了:

['99965', '44144', '12334', '00000']

但也可以给出以下内容,因为'12334''00000'的计数相同。 由于字典(和计数器)工作方式的性质,这是不可避免的。 但如果这很重要,请告诉我,我可以更新答案。

['99965', '44144', '00000', '12334']

请注意,并非所有代码都需要在with语句中,一旦创建了pArray ,就可以退出with语句。 此外,基本的 Python 使用lists而不是arrays

如果你想打印KeyValue对,你可以做

for key in reversed(sorted(dictn)):
    print("KEY: {0}, VALUE: {1}".format(key, dictn[key]))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM