访问Python dict中的项

访问Python dict中的项,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,假设我有一个过滤数据的函数,如下所示: from typing import Dict, Union def filterData(data: Dict[str, str], fields: Union[list, tuple]) -> dict: filteredData = {} for field in fields: if field in data: filteredData[field] = data[field]

假设我有一个过滤数据的函数,如下所示:

from typing import Dict, Union


def filterData(data: Dict[str, str], fields: Union[list, tuple]) -> dict:

    filteredData = {}

    for field in fields:
        if field in data:
            filteredData[field] = data[field]

    return filteredData
我这样使用这个函数:

data = filterData({"a": "b", "c": "d"}, ("a")) # This should return {"a": "b"}.
现在,当我尝试访问
一个
属性,如
data.a
,我得到一个错误,它说dict的
实例没有成员a
。如何定义和应用定义该词典所有成员的类型

我试图创建一个类

class ReqData():
    a: str
然后应用到变量,就像这样

data: ReqData = filterData({"a": "b", "c": "d"}, ("a")

但这也不起作用。

这与类型注释和Python字典语法无关。与JavaScript对象不同,您不能使用点符号访问Python字典中的键。相反,必须以与当前代码相同的方式使用括号表示法:

print(data["a"])
另一方面,您可以使用字典理解功能在一行中编写
filterData()
函数:

def filterData(data: Dict[str, Union(str, int)], fields: Union[list, tuple]) -> dict:
    return {field : data[field] for field in data if field in fields}
def过滤器数据(dd,过滤器): 返回{k:v表示k,如果过滤器中有k,则返回dd中的v}

打印(筛选数据({'a':'avalue','b':'bvalue','c':'cvalue'},['a','c']))


{'a':'avalue','c':'cvalue'}

请澄清。您的
dict
没有成员
a
。它只有一个项目
“a”
,即
数据[“a”]
。您似乎在寻找点词典。哦,菜鸟的错误。谢谢@桑杰:没问题。如果您感兴趣,我刚刚为
filterData()
函数添加了一个一行程序实现。请注意,我首先迭代
数据中的键。如果
字段
包含不在
数据
中的额外键,这将更加有效。谢谢。但我认为有一个语法错误。我想应该删除
字段中的字段]}
中的方括号。@Sanjay是的,你是对的。谢谢你注意到这一点。现在已修复。感谢您对堆栈溢出的贡献。虽然这提供了一个更简单的
filter\u data()
实现,但它仍然没有回答OP关于如何从返回的字典中访问单个项的问题。