我是python的新手。我有一个字典列表。字典中的值为String
和Int
。
这里是字典列表,
a = [{ 'Item Type': 'Household', 'Sales Channel': 'Offline', 'Order Date': '2016-05-29','Ship Date': '2016-06-25 22:59:23', 'Units Sold': 1485 },{ 'Item Type': 'Fruits', 'Sales Channel': 'Offline', 'Order Date': '2016-11-11', 'Ship Date': '2016-11-20 22:59:23', 'Units Sold': 6267 }]
我在键Ship Date
和Order Date
中使用字符串形式的日期时间。我正在收集Dict中的字段类型。我已将int fields
带到int type
,并将all fields
带到all types
。但是我不知道如何将date field
转到date type
。为我提供一些解决方案。
这是我写的代码,
from datetime import datetime
a = [{ 'Item Type': 'Household', 'Sales Channel': 'Offline', 'Order Date': '2016-05-29','Ship Date': '2016-06-25 22:59:23', 'Units Sold': 1485 },{ 'Item Type': 'Fruits', 'Sales Channel': 'Offline', 'Order Date': '2016-11-11', 'Ship Date': '2016-11-20 22:59:23', 'Units Sold': 6267 }]
full_type_data = {}; int_type = []; all_type = []; date_type = []
for i in a:
for j in i:
if type(i[j]) == type(1) or type(i[j]) == type(1.1) :
if j not in int_type: int_type.append(j)
elif j not in all_type: all_type.append(j)
full_type_data = {"all_type":all_type, "int_type":int_type}
print("full_type_data",full_type_data)
得到的输出:
full_type_data {'all_type': ['Item Type', 'Sales Channel', 'Order Date', 'Ship Date'], 'int_type': ['Units Sold', 'Rating']}
必需的输出:
full_type_data {'all_type': ['Item Type', 'Sales Channel', 'Order Date', 'Ship Date'], 'int_type': ['Units Sold', 'Rating'], 'date_type': ['Order Date', 'Ship Date']}
答案 0 :(得分:2)
一种检查类型的pythonic方法就是尝试强制转换并捕获错误。
try:
cast = int(string_value)
except ValueError:
pass # string_value was no int
else:
do_something() # string value was an int
您可以对日期和日期时间执行相同操作:
from datetime import datetime
try:
cast = datetime.fromisoformat(string_value)
except ValueError:
pass # string_value was no datetime
else:
do_something() # string value was a datetime
将其包装在函数中,可以使代码非常干净:
def is_datetime(value):
try:
datetime.fromisoformat(string_value)
except ValueError:
return False
else:
return True
答案 1 :(得分:1)
您可以使用dateutil.parser来检查字符串是否为日期。
from dateutil.parser
import parse
def is_datetime(string, fuzzy = False):
try:
parse(string, fuzzy = fuzzy)
return True
except ValueError:
return False
然后在代码if-else块中使用此功能。在下面修改了代码
from datetime import datetime
a = [{
'Item Type': 'Household',
'Sales Channel': 'Offline',
'Order Date': '2016-05-29',
'Ship Date': '2016-06-25 22:59:23',
'Units Sold': 1485,
}, {
'Item Type': 'Fruits',
'Sales Channel': 'Offline',
'Order Date': '2016-11-11',
'Ship Date': '2016-11-20 22:59:23',
'Units Sold': 6267,
}]
full_type_data = {}
int_type = []
all_type = []
date_type = []
for i in a:
for j in i:
if type(i[j]) == type(1) or type(i[j]) == type(1.1):
if j not in int_type:
int_type.append(j)
elif is_datetime(i[j]):
if j not in date_type:
date_type.append(j)
elif j not in all_type:
all_type.append(j)
full_type_data = {'all_type': all_type, 'int_type': int_type,
'date_type': date_type}
print ('full_type_data', full_type_data)
希望这会起作用。