在字典python

时间:2019-12-07 07:22:20

标签: python python-3.x datetime dictionary

我是python的新手。我有一个字典列表。字典中的值为StringInt。 这里是字典列表,

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 DateOrder 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']}

2 个答案:

答案 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)

希望这会起作用。