我正在尝试按照 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 中创建一组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并将其添加到我的操作set中union,它的行为将不会按预期进行。
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 都显示出相同的行为。
我有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,或使用条件.但我想知道是否有更好的选择,因为我在一个非常大的数据集上使用它.
我使用了文档中的示例:
>>> 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()代码?
在中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代码,可能很大。我需要它有些效率。
我想在计数使用迭代元素的出现次数most_common中collections模块.
>>> 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'功能,以便我们可以获得所需的输出.
我试图使用计数器按出现次数对字母进行排序,并将任何具有相同频率的字符按字母顺序排列,但我无法访问它产生的字典的值.
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)
如何按频率排序,然后按字母顺序排序,所以只显示一次的所有内容都按字母顺序排列?
我有一个问题,我需要在哈希映射中进行模糊查找,即返回与最接近查询的键对应的值,在我的例子中是由 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)
这是一个很好的方法还是有我没有想到的更好的解决方案?
我正在开发一个 NLP(自然语言处理)项目,其中使用了集合库中的 Python Counter() 函数。我得到以下形式的结果:
\n\n输出:
\n\nCounter({'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的collections库进行迭代(或更精确地说,通过双端队列进行每次迭代)的时间复杂度是多少?
一个例子是这样的:
elements = deque([1,2,3,4])
for element in elements:
print(element)
Run Code Online (Sandbox Code Playgroud)
每次迭代都是常数O(1)运算吗?还是执行线性O(n)运算以在每次迭代中到达元素?
有许多资源在线时间与所有其他deque的方法,如复杂性appendleft,append,popleft,pop。关于双端队列的迭代,似乎没有任何时间复杂度信息。
谢谢!
python ×10
python-3.x ×5
dictionary ×2
collections ×1
counter ×1
hashmap ×1
hashtable ×1
list ×1
namedtuple ×1
nlp ×1
python-2.7 ×1
set ×1
string ×1
words ×1