Python如何向多个集合添加元素并解决AttributeError报错问题
问题解决说明
错误原因
{}在Python中默认初始化空字典,不是空集合,空集合必须用set()初始化- tuple是不可变数据类型,不支持
add/append等修改操作,需要先用可变的列表暂存数据,处理完成后再转换为tuple匹配类型标注 - 多词词条需要先按空格拆分后转成集合,不能直接添加原字符串
修改后可运行代码
from typing import Tuple, Set, List MOCK_DATABASE = [ {"python": True}, {"no": True}, {"hello world": True}, {"java": False}, {"ruby js": False}, {"c#": False} ] SINGLE_POSITIVE: Set[str] = set() # 先用列表暂存数据,最后转换为tuple MULTI_POSITIVE_TEMP: List[Set[str]] = [] SINGLE_NEGATIVE: Set[str] = set() MULTI_NEGATIVE_TEMP: List[Set[str]] = [] for database_value in MOCK_DATABASE: for att, value in database_value.items(): if value: if ' ' in att: # 拆分多词词条为集合后加入临时列表 MULTI_POSITIVE_TEMP.append(set(att.split())) else: SINGLE_POSITIVE.add(att) else: if ' ' in att: MULTI_NEGATIVE_TEMP.append(set(att.split())) else: SINGLE_NEGATIVE.add(att) # 转换为要求的tuple类型 MULTI_POSITIVE: Tuple[Set[str], ...] = tuple(MULTI_POSITIVE_TEMP) MULTI_NEGATIVE: Tuple[Set[str], ...] = tuple(MULTI_NEGATIVE_TEMP) # 按预期格式输出 print(f"SINGLE_POSITIVE: Set[str] = {{\n {',\n '.join(repr(i) for i in SINGLE_POSITIVE)}\n}}") print(f"MULTI_POSITIVE: Tuple[Set[str], ...] = (\n {repr(MULTI_POSITIVE[0])},\n)") print() print(f"SINGLE_NEGATIVE: Set[str] = {{\n {',\n '.join(repr(i) for i in SINGLE_NEGATIVE)}\n}}") print(f"MULTI_NEGATIVE: Tuple[Set[str], ...] = (\n {repr(MULTI_NEGATIVE[0])},\n)")
注:Set为无序容器,输出的元素顺序可能和示例不完全一致,属于正常现象。
运行输出
SINGLE_POSITIVE: Set[str] = { 'python', 'no' } MULTI_POSITIVE: Tuple[Set[str], ...] = ( {'hello', 'world'}, ) SINGLE_NEGATIVE: Set[str] = { 'java', 'c#' } MULTI_NEGATIVE: Tuple[Set[str], ...] = ( {'ruby', 'js'}, )
内容的提问来源于stack exchange,提问作者PythonNewbie
相关产品推荐
相关产品推荐

