使用每个类别提取元组中的最后一个元素

时间:2018-03-26 12:02:58

标签: python python-3.x python-2.7

我有一个带有以下输出的元组:

(State A, 0:07:58)
(State A, 0:15:48)
(State B, 0:32:20)
(State B, 1:04:30)
etc...

我正在尝试隔离每个州的最后一个元素时间并将它们附加到列表中..所以对于上面的示例,它将是0:15:481:04:30,因为它们是最后一次特别是。

我知道如何获取列表中的最后一个元素(lst[-1])但是在涉及条件时我不太确定如何做到这一点。我不认为我需要将我的元组变成一个列表,因为我没有更改数据,只是试图提取它。

任何帮助表示赞赏。理想情况下没有熊猫。

干杯

5 个答案:

答案 0 :(得分:1)

这是一种方法,利用dict将使用最后一个可用密钥实例覆盖值的事实。

lst = [('State A', '0:07:58'),
       ('State A', '0:15:48'),
       ('State B', '0:32:20'),
       ('State B', '1:04:30')]

res = list(dict(lst).items())

# [('State A', '0:15:48'), ('State B', '1:04:30')]

当然,如果您不需要元组列表作为输出,dict(lst)就足够了。

如果您有多个值,可以扩展这个想法:

lst = [('State A', '0:07:58', 'X'),
       ('State A', '0:15:48', 'Y'),
       ('State B', '0:32:20', 'Z'),
       ('State B', '1:04:30', 'W')]

res = [(i,)+j for i, j in {k: tuple(v) for k, *v in lst}.items()]

# [('State A', '0:15:48', 'Y'), ('State B', '1:04:30', 'W')]

答案 1 :(得分:0)

您可以使用pandas。例如,您可以这样做:

import pandas as pd
df = pd.DataFrame.from_records([('State A', '0:07:58'), ('State A', '0:15:48'), ('State B', '0:32:20'), ('State B', '1:04:30')], columns=['state', 'time'])
df.groupby('state').agg('max')

它将返回:

          time
state
State A  0:15:48
State B  1:04:30

最后,您可以轻松地将其存储在csv中,或者将其作为元组列表,...选择权在您自己:)

答案 2 :(得分:0)

data = [("State A", "0:07:58"),
("State A", "0:15:48"),
("State B", "0:32:20"),
("State B", "1:04:30"),
("State B", "0:32:20"),]
print(dict(data))
>>> {'State A': '0:15:48', 'State B': '0:32:20'}

答案 3 :(得分:0)

假设在元组列表中的模式是相同的,你可以尝试这样的事情:

l = [('State A', '0:07:58'), 
     ('State A', '0:15:48'), 
     ('State B', '0:32:20'), 
     ('State B', '1:04:30')]

output = [tupl[1] for n, tupl in enumerate(l) if n%2]
# ['0:15:48', '1:04:30']

答案 4 :(得分:0)

我可以提出一个想法,按最后一个元素隔离看起来与dict的工作方式类似。

例如:

x = ( ('a' , 11), ('a', 7177), ('b', -1717), ('c', 1828), ('b', -181881) )

将此更改为字典

dict(x)将返回

{'a': 7177, 'c': 1828, 'b': -181881}

这里保存了每个字母的最后一个元素。

相关问题