python - 如何按条件简化字典列表?

标签 python list dictionary

我有日期对象的字典列表:

{ "begin" :date object1, "end" : date object2 }
....
{ "begin" :date object3, "end" : date object4 }

我想按条件简化此列表:

if cur.end == next.begin - datetime.timedelta(seconds=1))
    cur.end = next.end
    delete next

怎么做?

最佳答案

就像在另一个答案中解释的那样,您不应该在遍历列表时从列表中删除一个元素,这会导致很多问题。另一种创建全新列表的方法是 -

import datetime
lisdic = [] #list of dictionaries
prev = None
result = []
for i in lisdic:
    if not prev:
        prev = i
    elif prev['end'] == i['begin'] - datetime.timedelta(seconds=1):
        prev['end'] = i['end']
    else:
        result.append(prev)
        prev = i
if prev:
    result.append(prev)

这也将处理跨多个词典的类似间隔(示例是下面 DEMO 列表中的前 3 个词典)。

演示 -

>>> import datetime
>>> lisdic = [{"begin":datetime.datetime(2015,10,2,10,0,0),"end":datetime.datetime(2015,10,2,10,30,0)},
... {"begin":datetime.datetime(2015,10,2,10,30,1),"end":datetime.datetime(2015,10,2,11,0,0)},
... {"begin":datetime.datetime(2015,10,2,11,0,1),"end":datetime.datetime(2015,10,2,12,0,0)},
... {"begin":datetime.datetime(2015,10,3,10,0,0),"end":datetime.datetime(2015,10,3,10,30,0)},
... {"begin":datetime.datetime(2015,10,3,11,0,0),"end":datetime.datetime(2015,10,3,11,30,0)},
... {"begin":datetime.datetime(2015,10,4,12,0,0),"end":datetime.datetime(2015,10,2,12,10,0)}]
>>> prev = None
>>> result = []
>>> for i in lisdic:
...     if not prev:
...         prev = i
...     elif prev['end'] == i['begin'] - datetime.timedelta(seconds=1):
...         prev['end'] = i['end']
...     else:
...         result.append(prev)
...         prev = i
...
>>>
>>> if prev:
...     result.append(prev)
...
>>> pprint.pprint(result)
[{'begin': datetime.datetime(2015, 10, 2, 10, 0),
  'end': datetime.datetime(2015, 10, 2, 12, 0)},
 {'begin': datetime.datetime(2015, 10, 3, 10, 0),
  'end': datetime.datetime(2015, 10, 3, 10, 30)},
 {'begin': datetime.datetime(2015, 10, 3, 11, 0),
  'end': datetime.datetime(2015, 10, 3, 11, 30)},
 {'begin': datetime.datetime(2015, 10, 4, 12, 0),
  'end': datetime.datetime(2015, 10, 2, 12, 10)}]

关于python - 如何按条件简化字典列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32905713/

相关文章:

java - 从 Java 8 中的列表中提取重复对象

c++ - 编写 bool 表达式来判断列表是否在增加

Swift:类中可选字典的变量:在输出中显示括号

Python 字典打印第一次出现

python - 多处理。池 : How to start new processes as old ones finish?

python - 比较同一列表字典中的列表

python - 如果嵌套字典中存在值,则查找键

python - 将python sql列表转换为字典

python, 格式化字符串

python - 使用 POST 在网页中包含动态图像?