AFP*_*AFP 18 python dictionary types arguments
我有一个函数,其参数是字典列表。我试图在函数参数中指定字典的元素类型。该词典具有以下形式:
{'my_object':my_object, 'data':int}
Run Code Online (Sandbox Code Playgroud)
my_object是自定义数据类型。有没有办法指定字典的类型,如下所示:
def my_function(x : list[dict[my_object, int]]):
Run Code Online (Sandbox Code Playgroud)
Python 抱怨我如何定义类型并给出以下错误:
TypeError: 'type' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
Jav*_*Gom 20
你可以试试这个:
from typing import List, Dict
def get_list_of_dicts(name: str, surname: str) -> List[Dict[str, str]]:
return [{'name': name, 'surname': surname}]
print(get_list_of_dicts('Frank', 'Zappa'))
Run Code Online (Sandbox Code Playgroud)
我希望它对你有用。
Joh*_*rry -1
如果您询问是否可以指定包含自定义对象作为键的字典列表,那么答案如下。如果您希望在同一字典中指定多种类型的对象作为键,则这是行不通的。
您可以在 Python 3.9 中使用类型别名来完成前者。参考https://docs.python.org/3/library/typing.html给出了带有字典列表的示例。
下面的示例显示了包含自定义对象作为键的字典列表。
from collections.abc import Sequence
class MyClass:
def __init__(self, arg1, arg2):
self.attr1 = arg1 + arg2
class AnotherClass:
def __init__(self, arg1, arg2):
self.attr1 = arg1 + arg2
seq1 = dict[MyClass, int]
seq2 = list[seq1]
def myfunc(arg1: Sequence[seq2]) -> seq2:
for dict in arg1:
for key, value in dict.items():
print(key.attr1, value)
#Correct type provided.
myobj1 = MyClass('A', '1')
myobj2 = MyClass('B','2')
listdict= [{myobj1: 10, myobj2: 20}, {myobj2: 100, myobj1: 200}]
listdict
myfunc(listdict)
#Incorrect type provided.
myobj1 = AnotherClass('A', '1')
myobj2 = AnotherClass('B','2')
listdict= [{myobj1: 10, myobj2: 20}, { myobj2: 100, myobj1: 200}]
myfunc(listdict)
A1 10
B2 20
B2 100
A1 200
Run Code Online (Sandbox Code Playgroud)
注意:Linter 可能无法识别有效的输入。例如 mypy 抱怨 dict(object, int) 列表不是其序列。
| 归档时间: |
|
| 查看次数: |
32137 次 |
| 最近记录: |