标签: python-collections

打印有序计数器中的第一个键值

我正在尝试按照 OrderedCounter 输出中显示的顺序打印出键值对。

from collections import Counter, OrderedDict

class OrderedCounter(Counter, OrderedDict):
    pass

c = OrderedCounter('supernatural')
print c
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

OrderedCounter({'u': 2, 'r': 2, 'a': 2, 's': 1, 'p': 1, 'e': 1, 'n': 1, 't': 1, 'l': 1})
Run Code Online (Sandbox Code Playgroud)

有没有办法让我只能打印出第一个键值对?

我基本上是想打印给定字符串中的第一个重复字符。

python python-2.7 python-collections

4
推荐指数
1
解决办法
3535
查看次数

python set union 操作对于命名元组表现不佳

我想在 python 中创建一组namedtuple,能够使用联合操作动态添加元素。

下面的代码片段创建了一个setof namedtuple,它表现得很好。

from collections import namedtuple

B = namedtuple('B', 'name x')

b1 = B('b1',90)
b2 = B('b2',92)
s = set([b1,b2])
print(s)
Run Code Online (Sandbox Code Playgroud)

打印

{B(name='b1', x=90), B(name='b2', x=92)}
Run Code Online (Sandbox Code Playgroud)

现在,如果我创建另一个namedtuple并将其添加到我的操作setunion,它的行为将不会按预期进行。

b3 = B('b3',93)
s = s.union(b3)
print(s)
Run Code Online (Sandbox Code Playgroud)

该代码片段打印以下输出。

{93, B(name='b1', x=90), B(name='b2', x=92), 'b3'}
Run Code Online (Sandbox Code Playgroud)

预期输出应该是:

{B(name='b1', x=90), B(name='b2', x=92), B(name='b3', x=93)}
Run Code Online (Sandbox Code Playgroud)

我是不是对API理解有误?python2 和 3 都显示出相同的行为。

python set namedtuple python-collections

4
推荐指数
1
解决办法
779
查看次数

Python附加Counter to Counter,就像Python字典更新一样

我有2个计数器(来自集合的计数器),我想将一个附加到另一个,而第一个计数器的重叠键将被忽略.像dic.update(python词典更新)

例如:

from collections import Counter
a = Counter(a=4, b=0, c=1)
b = Counter(z=1, b=2, c=3)
Run Code Online (Sandbox Code Playgroud)

所以类似(忽略第一个计数器的重叠键):

# a.update(b) 
Counter({'a':4, 'z':1, 'b':2, 'c':3})
Run Code Online (Sandbox Code Playgroud)

我想我总是可以将它转换成某种字典,然后将其转换回Counter,或使用条件.但我想知道是否有更好的选择,因为我在一个非常大的数据集上使用它.

python counter dictionary python-3.x python-collections

4
推荐指数
2
解决办法
1077
查看次数

使Counter.most_common返回字典

我使用了文档中的示例:

>>> Counter('abracadabra').most_common(3)
[('a', 5), ('r', 2), ('b', 2)]
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到结果:

{ 'a': 5, 'r' :2 , 'b' :2}
Run Code Online (Sandbox Code Playgroud)

假设我们想保留Counter().most_common()代码?

python dictionary python-collections

3
推荐指数
2
解决办法
2101
查看次数

collections.Counter:most_common包括相等的计数

在中collections.Counter,该方法most_common(n)仅返回列表中的n个最频繁的项目。我确实需要这个,但是我也需要包括相等的计数。

from collections import Counter
test = Counter(["A","A","A","B","B","C","C","D","D","E","F","G","H"])
-->Counter({'A': 3, 'C': 2, 'B': 2, 'D': 2, 'E': 1, 'G': 1, 'F': 1, 'H': 1})
test.most_common(2)
-->[('A', 3), ('C', 2)
Run Code Online (Sandbox Code Playgroud)

我需要,[('A', 3), ('B', 2), ('C', 2), ('D', 2)] 因为在这种情况下它们的计数与n = 2相同。我的真实数据是DNA代码,可能很大。我需要它有些效率。

python collections python-collections

3
推荐指数
1
解决办法
2713
查看次数

如何在Python的集合中执行most_common时忽略大小写.计数器?

我想在计数使用迭代元素的出现次数most_commoncollections模块.

>>> names = ['Ash', 'ash', 'Aish', 'aish', 'Juicy', 'juicy']
>>> Counter(names).most_common(3)
[('Juicy', 1), ('juicy', 1), ('ash', 1)]
Run Code Online (Sandbox Code Playgroud)

但我的期望是,

[('juicy', 2), ('ash', 2), ('aish', 2)]
Run Code Online (Sandbox Code Playgroud)

是否有"pythonic"方式/技巧来结合'ignore-case'功能,以便我们可以获得所需的输出.

python string list python-3.x python-collections

3
推荐指数
1
解决办法
1036
查看次数

按频率排序计数器,然后按字母顺序在Python中排序

我试图使用计数器按出现次数对字母进行排序,并将任何具有相同频率的字符按字母顺序排列,但我无法访问它产生的字典的值.

letter_count = collections.Counter("alphabet")
print(letter_count)
Run Code Online (Sandbox Code Playgroud)

生产:

Counter({'a': 2, 'l': 1, 't': 1, 'p': 1, 'h': 1, 'e': 1, 'b': 1})
Run Code Online (Sandbox Code Playgroud)

如何按频率排序,然后按字母顺序排序,所以只显示一次的所有内容都按字母顺序排列?

python python-3.x python-collections

3
推荐指数
2
解决办法
2703
查看次数

在 Python 中进行模糊键查找的最佳方法?

我有一个问题,我需要在哈希映射中进行模糊查找,即返回与最接近查询的键对应的值,在我的例子中是由 Levenshtein 距离测量的。

我目前的方法是dict使用特殊的查找方法进行子类化,该方法计算所有键的 Levenshtein 距离,然后返回分数最低的键的值。基本上是这样的:

import Levenshtein

class FuzzyLookupDict(dict):

    def fuzzy_lookup(self, query):
        levs = [(key, Levenshtein.ratio(query, key)) for key in self.keys()]
        key, score = max(levs, key=lambda lev: lev[1])
        return self.get(key)
Run Code Online (Sandbox Code Playgroud)

这是一个很好的方法还是有我没有想到的更好的解决方案?

python hashtable hashmap data-structures python-collections

3
推荐指数
1
解决办法
969
查看次数

Python Counter() 函数用于统计文档中出现多次的单词

我正在开发一个 NLP(自然语言处理)项目,其中使用了集合库中的 Python Counter() 函数。我得到以下形式的结果:

\n\n

输出

\n\n
Counter({'due': 23, 'support': 20, 'ATM': 16, 'come': 12, 'case': 11, 'Sallu': 10, 'tough,': 9, 'team': 8, 'evident': , 'likely': 6, 'rupee': 4, 'depreciated': 2, 'senior': 1, 'neutral': 1, 'told': 1, 'tour\\n\\nRussia\xe2\x80\x99s': 1, 'Vladimir': 1, 'indeed,': 1, 'welcome,\xe2\x80\x9d': 1, 'player': 1, 'added': 1, 'Games,': 1, 'Russia': 1, 'arrest': 1, 'system.\\nBut': 1, 'rate': 1, 'Tuesday': 1, 'February,': 1, 'idea': 1, 'ban': 1, 'data': 1, 'consecutive': 1, 'interbank': 1, 'man,': 1, 'involved': 1, 'aggressive': …
Run Code Online (Sandbox Code Playgroud)

python nlp words python-3.x python-collections

3
推荐指数
1
解决办法
1万
查看次数

在Python中通过双端队列进行迭代的时间复杂度是多少?

从Python的collections库进行迭代(或更精确地说,通过双端队列进行每次迭代)的时间复杂度是多少?

一个例子是这样的:

elements = deque([1,2,3,4])
for element in elements:
  print(element)
Run Code Online (Sandbox Code Playgroud)

每次迭代都是常数O(1)运算吗?还是执行线性O(n)运算以在每次迭代中到达元素?

有许多资源在线时间与所有其他deque的方法,如复杂性appendleftappendpopleftpop。关于双端队列的迭代,似乎没有任何时间复杂度信息。

谢谢!

python python-3.x python-collections

2
推荐指数
1
解决办法
625
查看次数