标签: python-collections

如何检查对象的类型为'dict_items'?

在Python 3中,我需要测试我的变量是否具有类型'dict_items',所以我尝试了类似的东西:

>>> d={'a':1,'b':2}
>>> d.items()
dict_items([('a', 1), ('b', 2)])
>>> isinstance(d.items(),dict_items)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'dict_items' is not defined
Run Code Online (Sandbox Code Playgroud)

dict_items不是一个已知的类型.它没有在types模块中定义.如何测试具有类型的对象dict_items(不消耗数据)?

python dictionary types python-3.x python-collections

8
推荐指数
1
解决办法
387
查看次数

如何使用特定的数据结构作为defaultdict的default_factory?

我目前使用defaultdictCounter唯一指望的不可预知的钥匙几个不可预测值:

from collections import defaultdict, Counter

d = defaultdict(Counter)
d['x']['b'] += 1
d['x']['c'] += 1
print(d)
Run Code Online (Sandbox Code Playgroud)

这给了我预期的结果:

defaultdict(<class 'collections.Counter'>, {'x': Counter({'c': 1, 'b': 1})})
Run Code Online (Sandbox Code Playgroud)

我现在需要扩展其中的值的结构,defaultdictdict使用两个键来创建它:前一个Counter和一个str:

mystruct = {
    'counter': collections.Counter(),
    'name': ''
}
Run Code Online (Sandbox Code Playgroud)

是否有可能使用特定的数据结构(如上述),作为default_factorydefaultdict?预期的结果是,对于每个不存在的键,defaultdict将创建一个用上面的结构初始化的新键和值.

python dictionary python-collections

6
推荐指数
1
解决办法
817
查看次数

按字母顺序排列具有相同计数的元素

Python Collection Counter.most_common(n)方法返回前n个元素及其计数。但是,如果两个元素的计数相同,如何返回按字母顺序排序的结果?

例如:对于像这样的字符串BBBAAACCD,对于“最常见的2个”元素,我希望结果是指定的n = 2

[('A', 3), ('B', 3), ('C', 2)]
Run Code Online (Sandbox Code Playgroud)

并不是:

[('B', 3), ('A', 3), ('C', 2)]
Run Code Online (Sandbox Code Playgroud)

请注意,虽然AB具有相同的频率,A来之前B,因为它到来之前在结果列表中B按字母顺序排列。

[('A', 3), ('B', 3), ('C', 2)]
Run Code Online (Sandbox Code Playgroud)

我该如何实现?

python counter python-collections

6
推荐指数
1
解决办法
1145
查看次数

Python计数器比较为袋型

我需要Python中的bag / multiset-like数据类型。我了解collections.Counter通常用于此目的。但是比较运算符似乎不起作用:

In [1]: from collections import Counter

In [2]: bag1 = Counter(a=1, b=2, c=3)

In [3]: bag2 = Counter(a=2, b=2)

In [4]: bag1 > bag2
Out[4]: True
Run Code Online (Sandbox Code Playgroud)

对我来说,这似乎是一个错误。我期望小于和大于运算符执行类似集合的子集和超集比较。但是,如果真是这样,那bag1 > bag2将是错误的,因为bag2其中包含一个额外的'a'。Counter对象上似乎也没有子集/超集方法。所以我有两个问题:

  1. 计数器对象使用什么比较逻辑?
  2. 如何比较计数器对象的子集,超集,适当子集和适当超集?

python comparison multiset python-collections

5
推荐指数
1
解决办法
1436
查看次数

为什么collections.Counter是大写而collections.defaultdict不是?

模块中的某些元素collections似乎是大写的,而另一些则不是。其背后是否有具体的理由?

python collections class-names python-collections

5
推荐指数
1
解决办法
920
查看次数

python乘以两个集合计数器

Python集合计数器好奇,如果有更好的方法来做到这一点.重写Counter类方法?内置乘法产生两个计数器的点积

from collections import Counter
a = Counter({'b': 4, 'c': 2, 'a': 1})
b = Counter({'b': 8, 'c': 4, 'a': 2})    
newcounter = Counter()
for x in a.elements():
    for y in b.elements():
        if x == y:
             newcounter[x] = a[x]*b[y]

$ newcounter
Counter({'b': 32, 'c': 8, 'a': 2})
Run Code Online (Sandbox Code Playgroud)

python collections counter dot-product python-collections

5
推荐指数
1
解决办法
804
查看次数

反制允许重复

我有一个交通灯枚举定义可能的状态:

class TrafficLightPhase(Enum):
    RED = "RED"
    YELLOW = "YELLOW"
    GREEN = "GREEN"
Run Code Online (Sandbox Code Playgroud)

我轮询一个交通信号灯每秒获取当前状态,然后我将这些值放入a deque函数中:

def read_phases():
    while running:
        current_phase = get_current_phase_phases()
        last_phases.append(current_phase)
        time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

我想对相同状态的序列进行分组,以便了解交通信号灯的相位时序.

我尝试使用Countercollections,如下所示:

counter = collections.Counter(last_phases)
Run Code Online (Sandbox Code Playgroud)

它组合了很好的不同状态,但我不知道下一个周期何时开始.是否有类似的数据结构Counter允许重复?所以我可以得到如下结果:

Counter({
         'RED': 10,
         'GREEN': 10, 
         'YELLOW': 3,
         'RED': 10,
         'GREEN': 10, 
         'YELLOW': 3,
         'RED': 10,
         'GREEN': 10, 
         'YELLOW': 3
        })
Run Code Online (Sandbox Code Playgroud)

而不是:反击({'RED':30,'GREEN':30,'YELLOW':9})

python python-3.x python-collections

5
推荐指数
1
解决办法
41
查看次数

将 dict 转换为 defaultdict

以下代码使用 {} 运算符组合两个 defaultdict。

from collections import defaultdict
aa=defaultdict(str)
bb=defaultdict(str)
aa['foo']+= '1'
bb['bar']+= '2'
cc = {**aa,**bb}
type(cc)
Run Code Online (Sandbox Code Playgroud)

但是,正如我们看到的,如果我们运行它,{}操作符返回一个dict类型而不是一个defaultdict类型。

有没有办法将dict返回到 defaultdict ?

python dictionary python-3.x defaultdict python-collections

5
推荐指数
1
解决办法
1239
查看次数

最常见的2克使用python

给定一个字符串:

this is a test this is
Run Code Online (Sandbox Code Playgroud)

我怎样才能找到最常见的2克?在上面的字符串中,所有2克都是:

{this is, is a, test this, this is}
Run Code Online (Sandbox Code Playgroud)

你可以注意到,2克this is出现了2次.因此结果应该是:

{this is: 2}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用Counter.most_common()方法来查找最常见的元素,但是如何从字符串开始创建一个2-gram的列表呢?

python n-gram python-2.7 python-collections pyspark

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

在 python 中将集合转换为列表的算法复杂性

在 python 中,当我将集合转换为列表时,此类任务的算法复杂度是多少?它只是对集合进行类型转换,还是需要将项目复制到不同的数据结构中?发生了什么?

我很想知道复杂性是恒定的,就像 Python 中的许多东西一样。

python time-complexity python-3.x python-collections

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