标签: python-collections

ImportError:无法使用 Python 3.10 从“集合”导入名称“...”

我正在尝试运行使用各种依赖项的程序,但自从升级到 Python 3.10 后,这不再起作用。当我在终端中运行“python3”并从那里导入我的依赖项时,出现错误:

ImportError: cannot import name 'Mapping' from 'collections' (/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/collections/__init__.py)
Run Code Online (Sandbox Code Playgroud)

这似乎是一个普遍问题,但这是我的具体案例的回溯:

Traceback (most recent call last):
 File "/Users/mk/Flasktut/app.py", line 2, in <module>
  from flask import Flask, render_template
 File "/Users/mk/Flasktut/env/lib/python3.10/site-packages/flask/__init__.py", line 14, in <module>
  from jinja2 import escape
 File "/Users/mk/Flasktut/env/lib/python3.10/site-packages/jinja2/__init__.py", line 33, in <module>
  from jinja2.environment import Environment, Template
 File "/Users/mk/Flasktut/env/lib/python3.10/site-packages/jinja2/environment.py", line 16, in <module>
  from jinja2.defaults import BLOCK_START_STRING, \
 File "/Users/mk/Flasktut/env/lib/python3.10/site-packages/jinja2/defaults.py", line 32, in <module>
  from jinja2.tests import TESTS as DEFAULT_TESTS
 File "/Users/mk/Flasktut/env/lib/python3.10/site-packages/jinja2/tests.py", line 13, in <module>
  from …
Run Code Online (Sandbox Code Playgroud)

python importerror python-collections python-3.10

66
推荐指数
4
解决办法
21万
查看次数

Python collections.Counter:most_common复杂性

我想知道python 2.7中对象most_common提供的函数的复杂性是多少collections.Counter.

更具体地说,是Counter保持某种排序列表,当它被更新,允许执行的most_common速度比运行O(n)n添加计数器的(唯一的)项目的数量?为了您的信息,我正在处理一些大量的文本数据,试图找到第n个最常见的令牌.

我检查了官方文档(https://docs.python.org/2/library/collections.html#collections.Counter),CPython wiki(https://wiki.python.org/moin/TimeComplexity)但我可以找不到答案.先感谢您!

罗曼.

python counter time-complexity python-collections

27
推荐指数
2
解决办法
7626
查看次数

pandas.DataFrame.from_dict不使用OrderedDict保留顺序

我想将荷兰统计局(CBS)的OData XML数据源导入我们的数据库.使用lxml和pandas我认为这应该是直截了当的.通过使用OrderDict,我想保留列的顺序以便于阅读,但不知怎的,我无法做到正确.

from collections import OrderedDict
from lxml import etree
import requests
import pandas as pd


# CBS URLs
base_url = 'http://opendata.cbs.nl/ODataFeed/odata'
datasets = ['/37296ned', '/82245NED']

feed = requests.get(base_url + datasets[1] + '/TypedDataSet')
root = etree.fromstring(feed.content)

# all record entries start at tag m:properties, parse into data dict
data = []
for record in root.iter('{{{}}}properties'.format(root.nsmap['m'])):
    row = OrderedDict()
    for element in record:
        row[element.tag.split('}')[1]] = element.text
    data.append(row)

df = pd.DataFrame.from_dict(data)
df.columns
Run Code Online (Sandbox Code Playgroud)

检查data,OrderDict的顺序正确.但是查看df.head()列已经按字母顺序排序,首先使用CAPS?

帮忙,有人吗?

python pandas python-collections

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

Python的集合模块中的defaultdict是否真的比使用setdefault快?

我见过其他Python程序员使用collections模块中的defaultdict来实现以下用例:

from collections import defaultdict

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]

def main():
    d = defaultdict(list)
    for k, v in s:
        d[k].append(v)
Run Code Online (Sandbox Code Playgroud)

我通常使用setdefault来解决这个问题:

def main():
    d = {}
    for k, v in s:
        d.setdefault(k, []).append(v)
Run Code Online (Sandbox Code Playgroud)

文档实际上声称使用defaultdict更快,但我在测试自己时看到了相反的情况:

$ python -mtimeit -s "from withsetdefault import main; s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)];" "main()"
100000 loops, best of 3: 4.51 usec per loop
$ python -mtimeit -s "from withdefaultdict …
Run Code Online (Sandbox Code Playgroud)

python collections setdefault defaultdict python-collections

17
推荐指数
1
解决办法
5930
查看次数

collections.defaultdict是线程安全的吗?

我根本没有使用Python中的线程,并且认为这个问题是一个完全陌生的问题.

我想知道是否defaultdict是线程安全的.让我来解释一下:

我有

d = defaultdict(list)
Run Code Online (Sandbox Code Playgroud)

默认情况下会创建缺失键列表.假设我有多个线程同时开始执行此操作:

d['key'].append('value')
Run Code Online (Sandbox Code Playgroud)

最后,我应该最终结束['value', 'value'].但是,如果defaultdict不是线程安全的,如果线程1在检查之后和之前 产生线程2,它将导致交错,而另一个线程将创建列表并且可能附加.if 'key' in dictd['key'] = default_factory()d['key']'value'

然后当线程1再次执行时,它将继续从中d['key'] = default_factory()破坏现有的列表和值,我们将最终进入['key'].

我查看了defaultdict的CPython源代码.但是,我找不到任何锁或互斥锁.我想只要记录在案,它就不是线程安全的.

有些人昨晚在IRC上表示Python上有GIL,所以它在概念上是线程安全的.有人说线程不应该在Python中完成.我很困惑.想法?

python defaultdict python-collections

16
推荐指数
1
解决办法
2301
查看次数

namedtuple的第一个参数用于什么?

我们用namedtuple这样的:

>>> from collections import namedtuple
>>> Point = namedtuple('Point', ['x', 'y'])
>>> p=Point(1,2)
>>> p.x
1
Run Code Online (Sandbox Code Playgroud)

我发现第一个论点namedtuple似乎没用,因为:

首先,我们不能使用它(例如,创建一个实例):

>>> from collections import namedtuple
>>> P = namedtuple('Point', ['x', 'y'])
>>> p = Point(1,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'Point' is not defined
Run Code Online (Sandbox Code Playgroud)

其次,似乎没有约束(例如,我们不必使其独特):

>>> P1 = namedtuple('Point', ['x', 'y'])
>>> P2 = namedtuple('Point', ['x', 'y', 'z'])
>>> p1 = P1(1,2)
>>> p2 = P2(1,2,3)
>>> p1
Point(x=1, …
Run Code Online (Sandbox Code Playgroud)

python namedtuple python-collections

13
推荐指数
1
解决办法
917
查看次数

大写在Python集合模块中的重要性?

collectionsPython模块中的类的大写形式是否有意义?特别是,我发现OrderedDict使用CamelCase 令人困惑,而CamelCase defaultdict都是小写字母。我的假设是它们都将使用CamelCase,因为它们都是类。

在此处输入图片说明

python naming-conventions python-collections

11
推荐指数
1
解决办法
139
查看次数

如何用键初始化defaultdict?

我有一个列表字典,它应该用默认密钥初始化.我猜,下面的代码不好(我的意思是,它有效,但我觉得它不是用pythonic方式编写的):

d = {'a' : [], 'b' : [], 'c' : []}
Run Code Online (Sandbox Code Playgroud)

所以我想使用更像pythonic的东西defaultict:

d = defaultdict(list)
Run Code Online (Sandbox Code Playgroud)

但是,我见过的每个教程都会动态设置新密钥.但在我的情况下,所有的键都应该从一开始就定义.我正在解析其他数据结构,只有当结构中的特定键也包含在我的字典中时,才会向我的字典添加值.

如何设置默认密钥?

python defaultdict python-collections

9
推荐指数
4
解决办法
7119
查看次数

Python 3.9.1 中的 collections.abc.Callable 是否有 bug?

Python 3.9包括PEP 585并弃用了模块中的许多类型,typing转而支持 中的类型collections.abc,现在它们支持__class_getitem__. 例如,就是这种情况Callable。对我来说,似乎typing.Callablecollections.abc.Callable应该总是表现得相似,但事实并非如此。

这个简单的示例会导致错误:

>>> from typing import Optional
>>> from collections.abc import Callable
>>> def foo(arg: Optional[Callable[[int], int]]) -> None:
...    pass
...
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/local/lib/python3.9/typing.py", line 262, in inner
    return func(*args, **kwds)
  File "/usr/local/lib/python3.9/typing.py", line 339, in __getitem__
    return self._getitem(self, parameters)
  File "/usr/local/lib/python3.9/typing.py", line 463, in Optional
    return Union[arg, type(None)]
  File …
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-collections python-typing python-3.9

9
推荐指数
1
解决办法
3933
查看次数

如何检查对象的类型为'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
查看次数