我想抓取天气预报数据,更准确地说,我想从具有多词列表的字典中获取数据:
data = {'city': BERLIN,
'list': [{'date': '2018-10-19 18:00:00',
'weather': {'temp': 12.86,
'temp_max': 13.98,
'temp_min': 12.86},
'wind': {'deg': 64.5011, 'speed': 1.32}},
{'date': '2018-10-20 18:00:00',
'weather': {'temp': 15.86,
'temp_max': 18.48,
'temp_min': 12.84},,
'wind': {'deg': 144.507, 'speed': 1.92}},
....
棘手的部分是我希望它返回字典中的“ wind”键,其中日期等于SATURDAY。
最后,我想做些类似的事情: {星期六,“风”:{“度”:144.507,“速度”:1.92}}
我已经遍历了“列表”,但不知道如何检查日期的星期六:
for item in data.get('list'):
print(item.get('date'))
print(item.get('wind'))
返回:
2018-10-20 18:00:00
{'speed': 3.92, 'deg': 294.003}
2018-10-20 21:00:00
{'speed': 3.57, 'deg': 276.001}
要检索日和风钥匙,我尝试过:
for item in data.get('list'):
print(item.get(datetime.strptime('date','%Y-%m-%d %H:%M:%S').weekday()))
但是会收到错误消息,“时间数据'日期'与格式'%Y-%m-%d%H:%M:%S”不匹配
答案 0 :(得分:1)
您只是错误地使用了strptime
,现在您要告诉它从字符串"date"
中提取日期数据,但是您想要的是从变量{{ 1}}:
item["date"]
您也不需要使用字典的for item in data['list']:
print(datetime.strptime(item["date"],'%Y-%m-%d %H:%M:%S').weekday()))
功能,使用方括号表示法会更容易并且更容易接受
答案 1 :(得分:0)
您应使用item['date']
而不是文字'date'
来引用项目的'date'
值。以下内容将返回第一个星期六条目的wind
键的子命令:
next((item['wind'] for item in data['list'] if datetime.strptime(item['date'],'%Y-%m-%d %H:%M:%S').weekday() == 5), {})
答案 2 :(得分:0)
您想做三件事。
date
转换为工作日。Saturday
。您已经确定了第一步,但是您无需使用get()
方法来访问字典中的键。使用方括号也可以。
for item in data['list']:
do something
当您处于循环内时,您需要从date
键中获取值,然后使用datetime object
函数将其转换为datetime.strptime()
。现在,您要对值为date
的字符串执行此操作。
您正在这样做: datetime.strptime('date','%Y-%m-%d %H:%M:%S')
应该是这样的: datetime.strptime(item['date'],'%Y-%m-%d %H:%M:%S')
从date
键转换为值之后,可以将其存储在变量中,并使用strftime()
方法将其转换为工作日字符串,方法是使用%A
进行调用
第三步也是最后一步是检查工作日是否为Saturday
。您可以使用IF语句执行此操作。
if week_day == 'Saturday':
do something
将这三个步骤结合在一起可能会导致如下所示:
for item in data['list']: # step 1
date = datetime.strptime(item['date'],'%Y-%m-%d %H:%M:%S') # step 2a
weekday = date.strftime('%A') # step 2b
if weekday == 'Saturday': # step 3
print(item)
答案 3 :(得分:0)
谢谢您,反义词,尤其是 user347 。我根据您的建议提出以下建议。请注意,由于要获取星期六和星期日以及12点和15点的数据,因此对其进行了扩展。是否有缩短4个if语句的好方法?
for item in data['list']:
date = datetime.strptime(item['date'],'%Y-%m-%d %H:%M:%S')
weekday = date.strftime('%A')
time = date.strftime('%H')
if weekday == 'Saturday' and time == '12':
if item['wind']['speed'] >= 6 and item['wind']['deg'] >= 180:
print('Perfect conditions on Saturday at 12 - wind with ' +
str(round(item['wind']['speed']* 1.943846, 1)) +
' knots' + ' and direction: '+ str(item['wind']['deg']))
if weekday == 'Saturday' and time == '15':
if item['wind']['speed'] >= 6 and item['wind']['deg'] >= 180:
print('Perfect conditions on Saturday at 15 - wind with ' +
str(round(item['wind']['speed']* 1.943846, 1)) +
' knots' + ' and direction: '+ str(item['wind']['deg']))
if weekday == 'Sunday' and time == '12':
if item['wind']['speed'] >= 6 and item['wind']['deg'] >= 180:
print('Perfect conditions on Sunday at 12 - wind with ' +
str(round(item['wind']['speed']* 1.943846, 1)) +
' knots' + ' and direction: '+ str(item['wind']['deg']))
if weekday == 'Sunday' and time == '15':
if item['wind']['speed'] >= 6 and item['wind']['deg'] >= 180:
print('Perfect conditions on Sunday at 12 - wind with ' +
str(round(item['wind']['speed']* 1.943846, 1)) +
' knots' + ' and direction: '+ str(item['wind']['deg']))
返回:
Perfect conditions on Saturday at 12 - wind with 13.4 knots and direction:
306.511
Perfect conditions on Saturday at 12 - wind with 14.0 knots and direction:
306.001