具有已知键输入的 Python 3 字典

标签 python python-3.x dictionary type-hinting python-typing

我正在使用 Python 3 打字功能来实现更好的自动完成功能。

很多时候我都有返回带有特定键的键/值(字典)的函数。 super 简单的例子:

def get_info(name):
    name_first_letter = name[0]
    return {'my_name': name, 'first_letter': name_first_letter}

我想向此函数添加类型提示,以告诉其他使用此函数的人会发生什么。

我可以做这样的事情:

class NameInfo(object):
    def __init__(self, name, first_letter):
        self.name = name
        self.first_letter = first_letter

然后将函数签名更改为:

def get_info(name) -> NameInfo:

但是每个字典都需要太多代码。

这种情况下的最佳做法是什么?

最佳答案

正如 Blckknght、您和 Stanislav Ivanov 在评论中所指出的,您可以使用 NamedTuple :

from typing import NamedTuple


class NameInfo(NamedTuple):
    name: str
    first_letter: str


def get_info(name: str) -> NameInfo:
    return NameInfo(name=name, first_letter=name[0])

从 Python 3.8 开始,您可以使用 TypedDict这与您想要的更相似:

from typing import TypedDict


class NameInfo(TypedDict):
    name: str
    first_letter: str


def get_info(name: str) -> NameInfo:
    return {'name': name, 'first_letter': name[0]}

关于具有已知键输入的 Python 3 字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44225788/

相关文章:

c# - 在 .NET 字典的情况下,双重散列如何工作?

python - 在Python中为字典中的列表项赋值

python - 如何获取数据框中的事件频率和每个事件的频率?

python - Xpath 查询 'like' 替换

Python Gtk 按钮

python - PySide 是否支持 Python 3?

python - 使用 Tensorflow 2.0 进行逻辑回归?

python - aws lambda 无法导入模块 'lambda_function' : No module named 'requests'

python - 为什么同一行声明的两个类对象指向一个对象?

python - 如果列表中存在值,则返回键(来自字典)