为什么当我尝试执行以下操作时,我会得到need more than 1 value to unpack
?
for key,value in countstr:
print key,value
for key,value in countstr:
ValueError: need more than 1 value to unpack
然而这很好用:
for key,value in countstr.most_common():
print key,value
我不明白,是不是countstr
和countstr.most_common()
等同?
编辑:
感谢以下答案,我想我不明白的是:如果countstr
是映射,那么countstr.most_common()
是什么? - 我是Python的新手,对不起,如果我在这里遗漏了一些简单的东西。
答案 0 :(得分:5)
不,他们不是。迭代映射(无论是collections.Counter
还是dict
或...)仅迭代映射的键。
还有另一个区别:迭代Counter
的密钥以无定义的顺序传递它们。 most_common()
返回的顺序已定义(按值的倒序排序)。
答案 1 :(得分:2)
不,他们不等同。 countstr
是Counter
,它是字典的子类。迭代它一次产生1个键。 countstr.most_common()
是一个包含2元组(有序键值对)的列表。
答案 2 :(得分:1)
counttr是一个Counter,它是用于计算可哈希对象的子类。这是一个无序集合,其中elements
存储为dictionary keys
,其counts
存储为dictionary values
。
>>> c = Counter(a=4, b=2, c=0, d=-2)
>>> list(c.elements())
['a', 'a', 'a', 'a', 'b', 'b']
答案 3 :(得分:0)
您不能直接迭代计数器值/键,但可以将它们复制到列表中并迭代该列表。
s = ["bcdef", "abcdefg", "bcde", "bcdef"]
import collections
counter=collections.Counter(s)
vals = list(counter.values())
keys = list(counter.keys())
vals[0]
keys[0]
输出:
2
'bcdef'