python 字典是什么似乎有些混淆。 businesses 中的数组中的数据实际上是 JavaScript 对象表示法 (JSON) 中的字符串,python 将其视为字符串。要将其用作 python 字典,您需要使用 python 的 json 库对其进行转换。转换看起来像,
import json
python_obj = json.loads(json_str)
您提供的对象是一个 JSON 字符串数组,例如
businesses = ["{\"hours\":"
"{"
"\"tuesday\": [[\"11:30\", \"23:00\"]],"
"\"thursday\": [[\"11:30\", \"23:00\"]],"
"\"wednesday\": [[\"11:30\", \"23:00\"]],"
"\"friday\": [[\"11:30\", \"23:00\"]],"
"\"sunday\": [[\"9:00\", \"23:00\"]],"
"\"monday\": [[\"11:30\", \"23:00\"]],"
"\"saturday\": [[\"11:30\", \"23:00\"]]"
"},"
"\"name\": \"XYZ\""
"}"]
python 字典的数组如下所示
businesses = [
{
"hours":{
"tuesday":[["11:30","23:00"]],
"thursday":[["11:30","23:00"]],
"wednesday":[["11:30","23:00"]],
"friday":[["11:30", "23:00"]],
"sunday":[["9:00", "23:00"]],
"monday":[["11:30", "23:00"]],
"saturday":[["11:30", "23:00"]]
},
"name":"XYZ"
}
]
因此,您看到它输出每个字母的原因是因为您正在遍历字符串,而不是 python 字典。当 python 遍历一个字符串时,它会遍历每个字符。就像下面这样。
string_data = "123456789"
# will iterate through each character
for i in string_data:
print(i) # will print 9 times each time outputting a character in order
至于函数,您需要确保在进行时间比较时,您使用的是 Python 时间对象而不是字符串,因为这样可以准确地比较时间。我不完全确定为什么时间会列在嵌套数组中,例如[["11:30","23:00"]],因此如果其他业务的数据格式不同,您可能需要修改以下函数。
这是一个描述你需要什么的函数。
import json, datetime
businesses = ["{\"hours\":"
"{"
"\"tuesday\": [[\"11:30\", \"23:00\"]],"
"\"thursday\": [[\"11:30\", \"23:00\"]],"
"\"wednesday\": [[\"11:30\", \"23:00\"]],"
"\"friday\": [[\"11:30\", \"23:00\"]],"
"\"sunday\": [[\"9:00\", \"23:00\"]],"
"\"monday\": [[\"11:30\", \"23:00\"]],"
"\"saturday\": [[\"11:30\", \"23:00\"]]"
"},"
"\"name\": \"XYZ\""
"}"]
def count_businesses(business_list):
"""
:param business_list: An array of business in JSON to query from
:return: Int of the count of businesses that are open on Sunday before 10 am
"""
# initialize the array that will contain the businesses that meet the search criteria
businesses_found = []
# python time object of 10:00am that will be used to check against
opening_business_time = datetime.time(hour=10)
# iterate through each busineses to check if it meets the search criteria
for business in business_list:
# since each business is in JSON, we convert it into a Python object
business_obj = json.loads(business)
# Look into the 'hours' key, then the 'sunday' key and get the first item in the array. ( i.e ["11:30","23:00"])
sunday_hours = business_obj["hours"]["sunday"][0]
# read in the sunday opening hours as a string from the first value of the array. {i.e "11:30")
sunday_opening_hours_str = sunday_hours[0]
# convert the sunday opening hours into a time object so it can be compared.
# '%H:%M' looks for the format HH:MM in a string.
# for more reference. https://docs.python.org/3.6/library/datetime.html#strftime-and-strptime-behavior
sunday_opening_hours_time = datetime.datetime.strptime(sunday_opening_hours_str, '%H:%M').time()
# if sunday opening hours is before 10 am
if sunday_opening_hours_time < opening_business_time:
# add the business object to the list
businesses_found.append(business_obj)
# returns the count of the businesses that met the search criteria
return len(businesses_found)
total = count_businesses(businesses)
print(total)