首页 > 解决方案 > 如何在仅对应于某些日期的字符串中返回分号后的数字?

问题描述

['2017-07-17', '2017-07-27', '2017-07-17;14', '2017-07-17;5', '2017-07-19;11', '2017-07-19;13', '2017-07-23;4', '2017-07-27;-1']

我想提取与日期对应的分号右侧的所有数字。例如,使用 date '2017-07-17',我想返回 list [14,5]。而对于日期,2017-07-23我只想返回[4]

我怎样才能做到这一点?我只知道遍历索引以提取数字,但这不会让我得到与某些日期相对应的数字列表。

for eventIndex in range(2,len(path)): curr_date = path[eventIndex].split(';')[0]

只会让我得到遍历的相应数字,但我只是不知道如何获取与每个日期对应的列表。

标签: pythonstringlist

解决方案


选择适当的数据结构,例如 a collections.defaultdictwithlist作为工厂:

In [1233]: out = collections.defaultdict(list)

In [1234]: lst = ['2017-07-17', '2017-07-27', '2017-07-17;14', '2017-07-17;5', '2017-07-19;11', '2017-07-19;13', '2017-07-23;4', '2017-07-27;-1']

In [1235]: for i in lst:
      ...:     m, _, n = i.partition(';')
      ...:     if n:
      ...:         out[m].append(n)
      ...:         

In [1236]: out
Out[1236]: 
defaultdict(list,
            {'2017-07-17': ['14', '5'],
             '2017-07-19': ['11', '13'],
             '2017-07-23': ['4'],
             '2017-07-27': ['-1']})

In [1237]: out['2017-07-17']
Out[1237]: ['14', '5']

In [1238]: out['2017-07-23']
Out[1238]: ['4']

在这里,我们遍历列表,在 上对字符串进行分区;,并使用日期部分作为字典的键,其out值是附加的右侧子字符串。


推荐阅读