按值排序词典

2024-04-20 07:49:21 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正在使用Python根据时间戳对我的GPS数据进行排序,如果位置相同但时间戳不同,我还想添加error函数。我发现我的数据集有点奇怪。如果你能建议新的数据集类型?到目前为止我有这个。。。你知道吗

dic_loc = {'latitude': [],
           'longitude': [],
           'timestamp': []}

def make_timestamped_loc(La, Lng, TS):

    dic_loc['latitude'].append(La)
    dic_loc['longitude'].append(Lng)
    dic_loc['timestamp'].append(int(TS))

make_timestamped_loc(37.481236, 126.952733, 1483196400)
make_timestamped_loc(37.310045, 127.101255, 1408323255)
make_timestamped_loc(37.383065, 126.672596, 1508322531)
make_timestamped_loc(37.383065, 126.672596, 1444999230)

def sort_locs(dictSorting):
    # sortedByTime = sorted(dictSorting.items(), key = lambda i:i[1])
    # print(sortedByTime)
    dictSorting.sort()
    # print(dic_loc)
sort_locs(dic_loc['timestamp'])
print(dic_loc)

此代码仅对时间戳值进行排序。但是我希望我的其他键遵循时间戳值的顺序。你知道吗


Tags: 数据make排序def时间sortloctimestamp
3条回答

将此dict转换为数据帧。你知道吗

那么

排序=我的_dataframe.sort\u值(by='timestamp',ascending=False)

可以将latlontimestamp存储在dict中:

dic_loc = []

def make_timestamped_loc(La, Lng, TS):
   new_loc = {}
   new_loc['latitude'] = La
   new_loc['longitude'] = Lng
   new_loc['timestamp'] = int(TS)
   dic_loc.append(new_loc)

排序可以这样做:

newlist = sorted(dic_loc, key=lambda k: k['timestamp']) 

我会用^{}来做这个。你知道吗

from collections import namedtuple
GpsPoint = namedtuple('GpsPoint', ['timestamp', 'latitude', 'longitude'])
points = []
points.append(GpsPoint(1483196400, 37.481236, 126.952733))
points.append(GpsPoint(1408323255, 37.310045, 127.101255))
points.append(GpsPoint(1508322531, 37.383065, 126.672596))
points.append(GpsPoint(1444999230, 37.383065, 126.672596))

print(sorted(points))

每个点的属性都可以直接访问:

>>> point = GpsPoint(1444999230, 37.383065, 126.672596)
>>> point.timestamp
1444999230
>>> # or by index
>>> point[0]
1444999230
>>> point
GpsPoint(timestamp=1444999230, latitude=37.383065, longitude=126.672596)

它的作用就像一个元组,用于排序,所以它按第一个索引(timestamp)排序

与long/lat/time列表相比,这有点变化,但它会强制这些点保持同步。使用列表字典的方法,经度可以进入与纬度不同的顺序,因此无法返回原始数据。你知道吗

相关问题 更多 >