在Python字典中访问项目

时间:2020-03-16 16:24:59

标签: 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]

    return filteredData

我像这样使用此功能:

data = filterData({"a": "b", "c": "d"}, ("a")) # This should return {"a": "b"}.

现在,当我尝试访问a之类的data.a属性时,出现错误消息Instance of dict has no member a。如何定义和应用定义该词典所有成员的类型?

我试图创建一个类,

class ReqData():
    a: str

然后像这样应用于变量,

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

但这也不起作用。

2 个答案:

答案 0 :(得分:2)

这与类型注释和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}

答案 1 :(得分:-2)

def filter_data(dd,过滤器): 返回{k:v for k,如果过滤器中有k,则v在dd中}

print(filter_data({'a':'avalue','b':'bvalue','c':'cvalue'},['a','c']))

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