[英]Python dictionary counter positions change
所以我试图计算文本文件中重复次数最多的值。 通过使用Counter
方法,它会返回我正在寻找的内容
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
!
如果你想打印Key
, Value
对,你可以做
for key in reversed(sorted(dictn)):
print("KEY: {0}, VALUE: {1}".format(key, dictn[key]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.