我想用以下数据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) 我以与这些 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,但我认为这不相关。
我正在尝试将字典中的元素写入一个文本文件,其中每个键都是一列。目前有我看起来像
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”,但是我不确定还有什么。最后,我想要一个看起来像这样的文件:

谢谢
如何选择<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) 当我在Python(v2.7)中编写函数时,我经常会为其中一个参数设置一个类型.我正在与pandas莫的令人难以置信的精彩图书馆合作,所以我的论点经常"打算"成为pandas.DataFrames.
在我最喜欢的IDE(Spyder)中,当您键入句点时.,会出现一系列方法.此外,当您键入方法的左括号时,文档字符串将显示在一个小窗口中.
但是要使这些工作起作用,IDE必须知道变量的类型.但当然它永远不会.我是否遗漏了一些关于如何编写Pythonic代码的明显内容(我读过Python不是Java但它没有提到这个IDE自动完成问题.
有什么想法吗?
我有一个表与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)
为什么不允许这种特殊表达?
在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')
如何通过使用字典替换值来设置系列的级别值,或者只使用值列表来设置系列的级别值?
这是一个示例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) 我想使用正确的猫鼬模型来表示具有多个鉴别器的文档。
\n\n假设我有以下模型:
\n\nconst 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) 如果范围是由地址指定的,我可以迭代一系列单元格以分别对每个单元格进行操作:
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).
python ×5
airflow ×1
airflow-2.x ×1
autocomplete ×1
css ×1
csv ×1
dictionary ×1
excel ×1
ide ×1
mongoose ×1
node.js ×1
pandas ×1
postgresql ×1
pydantic ×1
spyder ×1
sql ×1
typing ×1
vba ×1