如何将列表的字典中的日期时间字符串与嵌套字典进行比较?

时间:2019-05-13 23:49:03

标签: python list datetime dictionary

我正在编写一个函数,该函数带有一个vendorID和一个date_time字符串,如果在完成交付的时间/日期不重叠的情况下可以返回vendorID,则应该返回该字符串。

我正在尝试比较字典中的日期时间字符串,该字典包含嵌套字典的列表以及各种元素,包括日期时间字符串。我想比较列表中每个嵌套字典的每个日期时间字符串,并检查日期是否不同,然后比较是否经过了一定的分钟数。

试图遍历字典和项目,并使用datetime.strptime()解析日期时间字符串,但是我不确定在遍历字典项目时如何比较字典列表中的日期。

   dict = {
"results": [
{
    "vendor_id": 1,                    
    "client_id": 10,                   
    "datetime": "2017-01-01 13:30:00"  
},
{
    "vendor_id": 1,
    "client_id": 40,
    "datetime": "2017-01-01 14:30:00"
}

3 个答案:

答案 0 :(得分:0)

您可以将string类型的时间更改为datetime类型的时间。 并且,只需使用-。 之后,如果您处理更多时间,则可以使用timedelta函数返回的内容。 如果您想获取分钟,请使用time_diff属性。

seconds

答案 1 :(得分:0)

希望这对您有所帮助。
按照您的建议使用dict;

dict = {
    "results": [
    {
        "vendor_id": 1,
        "client_id": 10,
        "datetime": "2017-01-01 13:30:00"
    },
    {
        "vendor_id": 1,
        "client_id": 40,
        "datetime": "2017-01-01 14:30:00"
    }]}

有一些日期时间,请使用for循环并测试是否;

somedatetime1 = '2017-01-01 14:00:00'
somedatetime2 = '2017-01-01 15:00:00'

for d in dict['results']:
    if d['datetime'] < somedatetime1:
        print('somedatetime1 :: Vendor {} Client {} DateTime {}'.format(d['vendor_id'], d['client_id'], d['datetime']))
    if d['datetime'] < somedatetime2:
        print('somedatetime2 :: Vendor {} Client {} DateTime {}'.format(d['vendor_id'], d['client_id'], d['datetime']))

返回;
somedatetime1 ::供应商1客户端10 DateTime 2017-01-01 13:30:00
somedatetime2 ::供应商1客户端10日期时间2017-01-01 13:30:00
somedatetime2 ::供应商1客户端40日期时间2017-01-01 14:30:00

答案 2 :(得分:0)

我认为在熊猫中执行此操作会更容易,因为您可以按供应商ID分组并仅对该供应商执行操作。

from sklearn.metrics.pairwise import euclidean_distances
import pandas as pd
import numpy as np

df = pd.DataFrame() #Initiate
grp = df.from_dict(dict['results']).groupby('vendor_id') #Convert into df and groupby vendor id, should be useful when u have more than one vendor
dct = {}

for group in grp.groups:
    df_vid = grp.get_group(group) # Obtain data for that vendor
    df_vid['datetime'] = pd.to_datetime(df_vid['datetime'])
    ab = np.array(df_vid['datetime'])
    dist = euclidean_distances(ab.reshape(-1, 1), ab.reshape(-1, 1)) # Find distance matrix
    dct[group] = dist # Assign it to dict by vendor ID as key