如何解决通过唯一键 Python
def merge(a,b):
'''
Merge two tuple lists and remove duplicates,sorting by the first element of each tuple.
Used for merging time series data to existing data.
a = [ (1,123),(2,122),(3,121),(4,120)]
b = [(0,(1,999),120),(5,123)]
merge(a,b) == [(0,123)]
'''
L = list(set(a + b))
L.sort(key=itemgetter(0))
return L
以上函数用于合并时间序列数据。每个元组中的第一个元素实际上是一个 datetime.datetime
对象。
我需要合并:
merge(a,123)]
注意右边的元组 (3,999)(变量 b)取代了元组 (3,121)。
使用 dict 可以帮助实现唯一键约束,但在对简单 dict 和等效列表的测试中,dict 消耗大约 3-6 倍的列表内存,是不可接受的。
from datetime import datetime,timedelta
from sys import getsizeof
for exp in range(3,7):
atime = datetime(2021,5,17,18,0)
num_elements = 10**exp
alist = [(atime + timedelta(seconds=i),i) for i in range(num_elements)]
adict = {atime + timedelta(seconds=i): i for i in range(num_elements)}
alist_size = getsizeof(alist)
adict_size = getsizeof(adict)
print(f'{num_elements=}: {adict_size / alist_size = :.1f}')
num_elements=1000: adict_size / alist_size = 4.1
num_elements=10000: adict_size / alist_size = 3.4
num_elements=100000: adict_size / alist_size = 6.4
num_elements=1000000: adict_size / alist_size = 4.8
我目前正在研究 Pandas DataFrame,它也可能很有用。
我将不胜感激任何指向函数或数据结构的指针,以便以简单且高效的方式获得我需要的功能。感谢阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。