【发布时间】:2014-05-12 10:39:33
【问题描述】:
我有一个类似的字典列表
d = [{10: "a"}, {20: "b"}, {30: "c"}]
此列表按键排序。我不依附于格式或数据类型 - 无论如何我都是从外部来源构建此列表(也就是说,如果有帮助,可以更改它)
我还有一个变量 x,范围从 0 到 100。
我想要得到的是列表d 重新排列(或重建,或复制到其他地方),从大于x 的第一个键开始。例如(编辑,对不起,我在最初的例子中犯了一个错误)
- 如果
x == 2那么d = [{10: "a"}, {20: "b"}, {30: "c"}] - 如果
x == 12那么d = [{20: "b"}, {30: "c"}, {10: "a"}] - 如果
x == 22那么d = [{30: "c"}, {10: "a"}, {20: "b"}] - 如果
x == 32那么d = [{10: "a"}, {20: "b"}, {30: "c"}]
我称它为“圆形”,因为它以封闭的方式表示“带有key > x 的下一个len(d) 元素”。
我将以链式if 的形式执行此操作,每次手动构建列表(上面的示例涵盖了案例)。除了是一个糟糕的解决方案之外,如果 len(d) 变大(现在是 3 所以最坏的情况我会选择链式 if),它就不能完全扩展。
解决这个问题的pythonic解决方案是什么?
【问题讨论】:
-
所有字典都有一个键吗?您是否考虑过使用
OrderedDict或元组列表? -
是的,它们确实有一个唯一的密钥。我没有考虑
OrderedDict或元组列表,但我可以将数据类型更改为除我的ifs 之外的任何方便的解决方案。 -
字典中的所有键都是唯一的,事实上只有一个让我感到惊讶。确定最佳数据结构需要更多信息。您的示例与描述不匹配“从大于
x的第一个键开始”。 -
我的意思是每个字典都有一个键,所有这些键都是唯一的(它们是时间戳)。因此没有像
[{10: "a"}, {10: "b"}]这样的案例。我从测量中得到的实际上是我提到的列表。 -
啊——你是对的,我刚刚意识到我在示例中犯了一个错误。我会马上改正的。
标签: python list circular-buffer