gpt4 book ai didi

python - 如何在 sortedcontainers.SortedDict 中设置排序谓词?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:54:16 26 4
gpt4 key购买 nike

有没有办法按值对 sortedcontainers.SortedDict 中的项目进行排序,以便 SortedDict 始终按基于值而不是键的排序顺序维护其项目?

sortedcontainers 中的标准示例显示 SortedDict 中的项目将按字典键自动排序:

>>> from sortedcontainers import SortedDict
>>> sd = SortedDict({'c': 3, 'a': 1, 'b': 2})
>>> sd
SortedDict({'a': 1, 'b': 2, 'c': 3})

到目前为止,我设法在创建期间按值(日期时间)对字典中的项目进行排序:

>>> import datetime
>>> from sortedcontainers import SortedDict
>>> d = {'a': {'datetime': datetime.datetime.now()}, 'b': {'datetime': datetime.datetime.now()}, 'z': {'datetime': datetime.datetime.now()}, 'c': {'datetime': datetime.datetime.now()}}
>>> sd = SortedDict(lambda key: d[key]['datetime'], d)
>>> sd
SortedDict(<function <lambda> at 0x101e86598>, {'a': {'datetime': datetime.datetime('...')}, 'b': {'datetime': datetime.datetime('...')}, 'z': {'datetime': datetime.datetime('...')}, 'e': {'datetime': datetime.datetime('...')}})

但是,当我尝试添加新项目时,它会抛出关键错误异常:

>>> sd['d'] = {'datetime': datetime.datetime.now()}
>>> KeyError: 'd'

最佳答案

我是 sortedcontainers 的新手,但我的印象是这是不可能的。看看相关的包 Sorted Collections特别是 ValueSortedDict .您将需要稍微重构您的代码,但您可以执行以下操作:

d = {'a': {'datetime': datetime.datetime.now()}, 'b': {'datetime': datetime.datetime.now()}, 'z': {'datetime': datetime.datetime.now()}, 'c': {'datetime': datetime.datetime.now()}}
vsd = ValueSortedDict()
for k, v in d.items():
vsd[k] = v['datetime']
vsd['d'] = datetime.datetime.now()

关于python - 如何在 sortedcontainers.SortedDict 中设置排序谓词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50557208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com