小编max*_*max的帖子

python身份字典

可能重复:
如何制作一个python字典,返回字典中缺少键的键,而不是引发KeyError?

我需要类似的东西defaultdict.但是,对于任何不在字典中的键,它应该返回键本身.

最好的方法是什么?

python dictionary python-3.x

6
推荐指数
2
解决办法
2176
查看次数

获得堆栈框架

如何让堆栈帧进入traceback.print_stack

Python 3.3a1文档:

traceback.print_stack(f=None, limit=None, file=None)

此函数从其调用点打印堆栈跟踪.可选f 参数可用于指定要启动的备用堆栈帧.可选的limit和file参数具有相同的含义 print_exception().

但是在文档中没有找到实际获得堆栈帧的方法.具体来说,假设我想打印从调用点上方一层开始的堆栈跟踪.我怎样才能做到这一点?

python stack-trace python-3.x

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

copy vs deepcopy:语义

我的班级代表各种系统的状态.每个实例都有两个属性:一个是在同一系统的所有状态之间共享的容器,另一个是每个实例唯一的容器.

状态的副本应该重用"共享"属性,但要创建"唯一"属性的深层副本.这实际上是唯一有意义的复制语义(状态的副本是同一系统的状态是很自然的).

我想为阅读和维护我的代码的人创造最少的惊喜.我应该覆盖__deepcopy__还是__copy__为了我的目的?

python copy deep-copy python-3.x

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

unittest和nose框架之间的冲突

鼻子支持测试生成器.但文件说:

请注意,unittest.TestCase子类不支持方法生成器

这意味着我的所有测试生成器都必须在unittest框架之外.

问题:我是否仍然可以使用unittest框架进行测试?或者,出于一致性原因,我应该unittest完全放弃吗?

为什么不nose支持测试生成器unittest.TestCase?这似乎破坏最大的优势nose:它是一个扩展,而不是替代unittest,因此没有带走任何的所提供的功能,提供了额外的好处unittest.或者我错过了什么?

还有一个相关的问题.如果我unittest完全抛弃,我应该将我的测试放入全局函数还是新的类层次结构?

python unit-testing nose python-3.x

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

将代码和数据保存在单独的存储库中的优缺点

我们有一个项目,其中包含数据和代码,捆绑到一个Mercurial存储库中.数据与代码一样重要(它包含业务逻辑,一些输入等的参数)但是,数据文件的格式很少变化,并且很自然地独立于代码更改数据文件.

统一存储库的一个优点是我们不必跟踪多个修订:如果我们需要重新创建先前运行的输出,我们只需要将系统更新为存储在输出日志中的单个修订版号.

一个缺点是,如果我们在多个磁头处于活动状态时修改数据,我们可能会丢失数据更改,除非我们手动将这些更改复制到每个磁头.

将代码和数据拆分为单独的存储库是否还有其他优缺点?

mercurial development-environment dvcs

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

查找注册类的所有抽象基类

如何找到给定类是"虚拟子类"的所有抽象基类?

换句话说,我正在寻找一个virtual_base_classes()像这样的魔术函数:

>>> for cls in virtual_base_classes(list):
>>>   print(cls)
<class 'collections.abc.MutableSequence'>
<class 'collections.abc.Sequence'>
<class 'collections.abc.Sized'>
<class 'collections.abc.Iterable'>
<class 'collections.abc.Container'>
Run Code Online (Sandbox Code Playgroud)

(我不知道所有注册的abclist,所以上面的例子可能不完整.)

请注意,并非每个抽象基类都将被定义collections.abc.有一个模块abc(不同于collections.abc)提供了元类ABCMeta.任何类都是ABCMeta使用标准接口(register方法)支持"虚拟子类"注册的实例.没有什么可以阻止某人(程序员或Python库)创建一个ABCMeta不属于的实例collections.abc.

python abstract-class subclass abc python-3.x

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

mypy 未检测到基本类型错误

使用 python 3.5.1。以及当前使用 git 安装的 mypy,mypy 标记错误 1 ​​和 2,但未报告 3

我做错了什么,或者这是一个错误,还是一个已知的问题?

import typing

def test_ordered_dict(od: typing.Dict[str,int]) -> typing.Dict[str,int]:
    return 1   #type error 1

a = test_ordered_dict(1)   #type error 2

def test_me():
    a = test_ordered_dict(1)  # type error 3 is not reported
Run Code Online (Sandbox Code Playgroud)

python static-typing mypy

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

链接分组,过滤和聚合

DataFrameGroupby.filter方法过滤组,并返回DataFrame包含通过过滤器的行的组.

但是我该怎么做才能获得一个新的DataFrameGroupBy物体而不是DataFrame后过滤?

例如,假设我有DataFrame df两列AB.我希望获得列B的每个值的列的平均值A,只要该组中至少有5行:

# pandas 0.18.0
# doesn't work because `filter` returns a DF not a GroupBy object
df.groupby('A').filter(lambda x: len(x)>=5).mean()
# works but slower and awkward to write because needs to groupby('A') twice
df.groupby('A').filter(lambda x: len(x)>=5).reset_index().groupby('A').mean()
# works but more verbose than chaining
groups = df.groupby('A')
groups.mean()[groups.size() >= 5]
Run Code Online (Sandbox Code Playgroud)

python grouping dataframe python-3.x pandas

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

Spark DataFrame如何区分不同的VectorUDT对象?

我正在尝试了解DataFrame列类型.当然,DataFrame不是物化对象,它只是Spark的一组指令,将来转换为代码.但我想象这个类型列表表示在执行操作时可能在JVM内部实现的对象类型.

import pyspark
import pyspark.sql.types as T
import pyspark.sql.functions as F
data = [0, 3, 0, 4]
d = {}
d['DenseVector'] = pyspark.ml.linalg.DenseVector(data)
d['old_DenseVector'] = pyspark.mllib.linalg.DenseVector(data)
d['SparseVector'] = pyspark.ml.linalg.SparseVector(4, dict(enumerate(data)))
d['old_SparseVector'] = pyspark.mllib.linalg.SparseVector(4, dict(enumerate(data)))
df = spark.createDataFrame([d])
df.printSchema()
Run Code Online (Sandbox Code Playgroud)

四个向量值的列在printSchema()(或schema)中看起来相同:

root
 |-- DenseVector: vector (nullable = true)
 |-- SparseVector: vector (nullable = true)
 |-- old_DenseVector: vector (nullable = true)
 |-- old_SparseVector: vector (nullable = true)
Run Code Online (Sandbox Code Playgroud)

但是当我逐行检索它们时,它们会变得不同:

> for x in df.first().asDict().items():
  print(x[0], type(x[1]))
(2) Spark Jobs
old_SparseVector …
Run Code Online (Sandbox Code Playgroud)

dataframe apache-spark pyspark apache-spark-ml apache-spark-mllib

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

在 Pandas DataFrame 中存储纯 python datetime.datetime

由于matplotlib不支持任何pandas.TimeStamp 或者numpy.datetime64,有没有简单的解决办法,我决定到本地大熊猫日期列转换为纯Python datetime.datetime,这样散点图更容易做出。

然而:

t = pd.DataFrame({'date': [pd.to_datetime('2012-12-31')]})
t.dtypes # date    datetime64[ns], as expected
pure_python_datetime_array = t.date.dt.to_pydatetime() # works fine
t['date'] = pure_python_datetime_array # doesn't do what I hoped
t.dtypes # date    datetime64[ns] as before, no luck changing it
Run Code Online (Sandbox Code Playgroud)

我猜大熊猫自动转换纯Pythondatetime所生产to_pydatetime到其原生格式。我想这通常是方便的行为,但有没有办法覆盖它?

python datetime python-3.x pandas

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