错误列表索引必须是整数或切片,而不是str
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误列表索引必须是整数或切片,而不是str相关的知识,希望对你有一定的参考价值。
根据标题,帮我解决错误。我试图打印countryCode基于country_name,它位于'rv'变量中。 country_found是国家/地区列表中具有相同值的数据列表,然后我尝试检索countryCode并且我得到了错误
rv = "Indonesia"
country_lower = rv.lower()
countries = {
"DATA": {
"data": [{
"countryId": "26",
"countryCode": "AU",
"name": "Australia"
}, {
"countryId": "17",
"countryCode": "ID",
"name": "Indonesia"
}]
}
}
def take_first(predicate, iterable):
for element in iterable:
if predicate(element):
yield element
break
country_found = list(
take_first(
lambda e: e['name'].lower() == country_lower,
countries['DATA']['data']
)
)
default_country_code = 'US'
country_code = (
country_found['countryCode']
if country_found
else default_country_code
)
print (country_code)
答案
country_found
是一个列表,但您正在尝试通过字符串索引获取项目:
country_found['countryCode']
你可能想要获得匹配的第一个结果:
country_code = country_found[0]['countryCode'] if country_found else default_country_code
但是,你真的需要将结果作为一个列表,如果你只是使用next()
怎么办:
result = take_first(lambda e: e['name'].lower() == country_lower,
countries['DATA']['data'])
try:
country_code = next(result)['countryCode']
except StopIteration:
country_code = default_country_code
另一答案
如果我正确地得到您的问题,下面是您可能想要查看的内容。
default_country_code = 'US'
print(country_found) # ==> list [{'countryId': '17', 'name': 'Indonesia', 'countryCode': 'IN'}]
print(country_found[0]) # ==> dictionary {'countryId': '17', 'name': 'Indonesia', 'countryCode': 'IN'}
print(country_found[0].get('countryCode',default_country_code)) # get countryCode. If countryCode is not there, get the default_country_code
以上是关于错误列表索引必须是整数或切片,而不是str的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:列表索引必须是整数或切片,而不是 str
TypeError:列表索引必须是整数或切片,而不是解析json请求时的str
类型错误:列表索引必须是整数或切片,而不是 str 尝试使用 cx_Freeze 将 .py 文件转换为 .exe 时