小编Lon*_*Rob的帖子

从字符串列表中解析 Pydantic 类列表

我想用以下数据Polygon列表来解析 a :Points

{"points": ["0|0", "1|0", "1|1"]}
Run Code Online (Sandbox Code Playgroud)

我天真地以为我可以做这样的事情:

from pydantic import BaseModel, validator


class Point(BaseModel):
    x: int
    y: int

    @validator("x", "y", pre=True)
    def get_coords(cls, value, values):
        x, y = value.split("|")
        values["x"] = x
        values["y"] = y


class Polygon(BaseModel):
    points: list[Point]
Run Code Online (Sandbox Code Playgroud)

但是当我尝试解析我的“JSON”字符串时,我收到一条错误消息value is not a valid dict

>>> Polygon.parse_obj({"points": ["0|0", "1|0", "1|1"]})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pydantic/main.py", line 511, in pydantic.main.BaseModel.parse_obj
  File "pydantic/main.py", line 331, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: …
Run Code Online (Sandbox Code Playgroud)

python pydantic

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

我的 DAG 配置/参数未传递给我的任务

我以与这些 Airflow 文档PythonOperator非常相似的方式将一些运行时 DAG 参数/配置传递给 a :

def print_x(x):
    print(f"x is {x}")


with DAG(
    "print_x",
    start_date=pendulum.datetime(2022, 6, 15, tz="UTC"),
    schedule_interval=None,
    catchup=False,
    params={
        "x": Param(42),
    },
) as dag:
    PythonOperator(
        task_id="print_x",
        op_kwargs={
            "x": "{{ params.x }}",
        },
        python_callable=print_x,
    )
Run Code Online (Sandbox Code Playgroud)

但是,当我手动触发 DAG 时,无论我在“触发 DAG”对话框中输入什么内容,我总是得到默认值 (42)。

这里出了什么问题?

注意:在我的特定情况下,我在 AWS Managed Workflows for Apache Airflow (MWAA) 上运行 Airflow 2.2.2,但我认为这不相关。

airflow airflow-2.x

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

使用键作为列标题将python字典写入CSV文件

我正在尝试将字典中的元素写入一个文本文件,其中每个键都是一列。目前有我看起来像

import csv
import numpy as np



data1 = np.arange(10)
data2 = np.arange(10)*2
data3 = np.arange(10)*3

writefile = '../Desktop/data.txt'
datadict = {} 

datadict['data1'] = data1
datadict['data2'] = data2
datadict['data3'] = data3


f = open( writefile, 'w' )
fieldnames = ['data1','data2', 'data3']
data = csv.DictWriter(writefile, fieldnames, restval='', extrasaction='ignore', dialect='excel')

f.close()
Run Code Online (Sandbox Code Playgroud)

但这给了我错误“参数1必须具有“写入”方法”。我不确定那是什么意思。我也担心方言=“ excel”,但是我不确定还有什么。最后,我想要一个看起来像这样的文件:

在此处输入图片说明

谢谢

python csv dictionary

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

选择除了类的子项之外的所有元素

如何选择<div>除了具有某些类的元素内的div之外的所有元素?

尝试:

 div :not(.test div)
 div:not(.test div) 
Run Code Online (Sandbox Code Playgroud)

但不起作用!


编辑:

这是请求的HTML.

<div>
</div>

<span class="test">
 <div/>
</span>
Run Code Online (Sandbox Code Playgroud)

css css-selectors

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

Python:告诉我的IDE对象是什么类型

当我在Python(v2.7)中编写函数时,我经常会为其中一个参数设置一个类型.我正在与pandas莫的令人难以置信的精彩图书馆合作,所以我的论点经常"打算"成为pandas.DataFrames.

在我最喜欢的IDE(Spyder)中,当您键入句点时.,会出现一系列方法.此外,当您键入方法的左括号时,文档字符串将显示在一个小窗口中.

但是要使这些工作起作用,IDE必须知道变量的类型.但当然它永远不会.我是否遗漏了一些关于如何编写Pythonic代码的明显内容(我读过Python不是Java但它没有提到这个IDE自动完成问题.

有什么想法吗?

python ide autocomplete typing spyder

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

创建计算值的索引

我有一个表sales被记录year如下:

id year sales
1  2001 10
2  2002 20
3  2003 30
Run Code Online (Sandbox Code Playgroud)

我要加入自己的桌子,以便sales_difference从一年到下一年:

SELECT s1.*, s1.sales - s2.sales AS sales_difference
FROM sales s1, sales s2
WHERE s1.year = s2.year + 1
Run Code Online (Sandbox Code Playgroud)

这个查询运行得很慢,所以我想创建一个索引year + 1.根据PostgreSQL文档,您可以在表达式上创建索引,例如:

CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));
Run Code Online (Sandbox Code Playgroud)

所以我尝试这样做:

CREATE INDEX sales_year_plus_one on sales (year + 1);
Run Code Online (Sandbox Code Playgroud)

这给了我:

ERROR:  syntax error at or near "+"
LINE 1: ...sales_year_plus_one on sales (year + 1);
                                              ^
Run Code Online (Sandbox Code Playgroud)

为什么不允许这种特殊表达?

sql postgresql

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

list元素的每个组合都没有替换

在Python 2.7中,我想获得列表元素的自我笛卡尔积,但没有元素与自身配对.

 In[]: foo = ['a', 'b', 'c']
 In[]: [x for x in itertools.something(foo)]
Out[]: 
       [('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b')]
Run Code Online (Sandbox Code Playgroud)

目前我这样做:

[x for x in itertools.product(foo, repeat=2) if x[0] != x[1]]
Run Code Online (Sandbox Code Playgroud)

但我怀疑有一个内置的方法.它是什么?

注意:itertools.combinations 不会给我 ('a', 'b')('b', 'a')

python

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

在MultiIndex中设置级别值

如何通过使用字典替换值来设置系列的级别值,或者只使用值列表来设置系列的级别值?

这是一个示例DataFrame:

     sector from_country to_country           0
0  Textiles          FRA        AUS   47.502096
1  Textiles          FRA        USA  431.890710
2  Textiles          GBR        AUS   83.500590
3  Textiles          GBR        USA  324.836158
4      Wood          FRA        AUS   27.515607
5      Wood          FRA        USA  276.501148
6      Wood          GBR        AUS    1.406096
7      Wood          GBR        USA    8.996177
Run Code Online (Sandbox Code Playgroud)

现在设置索引:

df = df.set_index(['sector', 'from_country', 'to_country']).squeeze()
Run Code Online (Sandbox Code Playgroud)

例如,如果我想根据以下键/值对进行更改:

In [69]: replace_dict = {'FRA':'France', 'GBR':'UK'}
In [70]: new_vals = [replace_dict[x] for x in df.index.get_level_values('from_country')]
Run Code Online (Sandbox Code Playgroud)

我希望输出看起来像:

In [68]: df.index.set_level_values(new_vals, level='from_country')
Out[68]: 
sector    from_country  to_country
Textiles  France        AUS …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

find后确定鉴别器类型的正确方法

我想使用正确的猫鼬模型来表示具有多个鉴别器的文档。

\n\n

假设我有以下模型:

\n\n
const membershipSchema = mongoose.Schema({\n  name: { type: String, required: true },\n  course: { type: mongoose.Schema.Types.ObjectId, ref: 'Course' },\n  price: { type: Number, required: true, get: p => `\xc2\xa3${p}.00` }\n}, { discriminatorKey: 'type' });\n\nconst subscriptionSchema = mongoose.Schema({\n  frequency: {\n    type: String, enum: [ 'week' , 'month' ],\n    required: true, get: val => `${val}ly subscription` }\n})\n\nconst ticketSchema = mongoose.Schema({\n  frequency: { type: String, default: 'one-off' }\n});\n\nconst Membership = mongoose.model('Membership', membershipSchema);\nconst Subscription = Membership.discriminator('Subscription', subscriptionSchema);\nconst Ticket = Membership.discriminator('Ticket', ticketSchema);\n\nmodule.exports …
Run Code Online (Sandbox Code Playgroud)

mongoose node.js mongoose-schema

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

为什么 For Each over Range.Columns(1) 不迭代单元格?

如果范围是由地址指定的,我可以迭代一系列单元格以分别对每个单元格进行操作:

Dim cell as Range
For Each cell In Range("A1:A10")
  debug.print cell.Address
Next cell
Run Code Online (Sandbox Code Playgroud)

产生预期的输出:

$A$1
$A$2
... etc
Run Code Online (Sandbox Code Playgroud)

但是,当我从范围集合中指定一列时Columns,迭代仅对整个列运行一次:

For Each cell In UsedRange.Columns(1)
    Debug.Print cell.Address
Next cell
Run Code Online (Sandbox Code Playgroud)

仅产生一个输出,包含整列:

$A$1:$A$20
Run Code Online (Sandbox Code Playgroud)

不是UsedRange.Columns(1)一个Range物体吗?如果不是的话,那是什么??

我已经阅读了关于行/列作为范围的讨论以及Range vs Range.Cells 的讨论,但我仍然可以弄清楚如何迭代UsedRange.Columns(1).

excel vba

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