Python 检查元素是列表还是其他对象
我有一个对象,它包含一个名为“companys”的元素。 此元素可以是对象列表,也可以只是单个对象(不包含在列表中) 我希望遍历所有公司,但如果元素“companys”只是一个项目(不包含在列表中),则此示例将失败: 我尝试在for循环之前进行测试,例如:Python 检查元素是列表还是其他对象,python,Python,我有一个对象,它包含一个名为“companys”的元素。 此元素可以是对象列表,也可以只是单个对象(不包含在列表中) 我希望遍历所有公司,但如果元素“companys”只是一个项目(不包含在列表中),则此示例将失败: 我尝试在for循环之前进行测试,例如: if type(companies['company']) is list: # do your thing 但这也失败了 有人能帮忙吗?首先,这是一种非常可怕的数据结构方式,你应该向创建它的人投诉。如果一个项目可以是一个列表,那么
if type(companies['company']) is list:
# do your thing
但这也失败了
有人能帮忙吗?首先,这是一种非常可怕的数据结构方式,你应该向创建它的人投诉。如果一个项目可以是一个列表,那么它应该始终是一个列表,即使该列表只包含一个元素
但是,您显示的代码应该可以工作,尽管更好的方法是
如果是instance(companys['company',list)
。如果仍然不起作用,您需要显示数据以及使用数据的确切代码。您可以从非列表中创建一个列表,无条件使用“for…in…”
您必须首先将JSON字符串转换回python对象。如果您按字面意思键入
If type(companys['company']是list:
,那么它不起作用的原因是您省略了一个右括号-它应该是If type(companys['company'])is list:
但是DanielRoseman使用isinstance
的解决方案更好。说@T.J.Crowder,你的编辑。要不要顺便来看看并提供你的理由?@Bart:谢谢你让我知道!我从问题中删除了“JSON”,因为JSON与问题无关,只是关于对象,而不是“JSON对象”…我认为这是一种可怕的数据结构方式,isinstance
是一种更好的方法。我只想在OP中添加以下内容:如果不是isinstance(companys['company',,list):companys['company']=[companys['company']]
可能值得一做——这样可以避免特殊的大小写循环等。不幸的是,不是我用这种方式构造的,它来自Yahoo的API。因此Yahoo正在返回这样的JSON。不知怎么的,isinstance起了作用,我以前的(使用正确数量的右括号)仍然失败。
if type(companies['company']) is list:
# do your thing
companies = list(companies)
for company in companies:
# use "company" in some way