タイトルに基づいて、エラーの解決を手伝ってください。 「rv」変数にあるcountry_nameに基づいてcountryCodeを印刷しようとしました。 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