从含字典与字符串的日志列表提取用户名报错求助
问题解决:从混合类型列表中提取用户名
错误原因
logs是列表类型,而.items()是字典专属方法,列表没有该属性,因此抛出AttributeError。同时原推导式逻辑错误,未区分列表中两种不同类型的元素(字符串和字典)。
正确实现代码
遍历logs中的每个元素,根据元素类型分别处理:
logs = [ "nt5510-clark\\clark63", { "guid": "A07BB2CD", "name": "srvfs01", "ips": [ "10.10.1.210" ] }, { "guid": "DB2A9C9E", "name": "nt5510-clark", "ips": [ "10.6.100.40" ] }, { "guid": "97F7AEEC", "name": "lapinf-msa", "ips": [ "192.168.0.32" ] }, "stephen.robertson", "christian", { "guid": "C888A5B2", "name": "nb-mcsorley", "ips": [ "" ] } ] username_list = [] for item in logs: if isinstance(item, str): username_list.append(item) elif isinstance(item, dict) and "name" in item: username_list.append(item["name"]) print(username_list)
也可以用列表推导式简化写法:
username_list = [ item if isinstance(item, str) else item["name"] for item in logs if isinstance(item, (str, dict)) and (isinstance(item, str) or "name" in item) ]
输出结果
运行后将得到期望的列表:
["nt5510-clark\\clark63","srvfs01","nt5510-clark","lapinf-msa","stephen.robertson","christian","nb-mcsorley"]
内容的提问来源于stack exchange,提问作者OverflowStack
相关产品推荐
相关产品推荐

