我有一个带有以下输出的元组:
(State A, 0:07:58)
(State A, 0:15:48)
(State B, 0:32:20)
(State B, 1:04:30)
etc...
我正在尝试隔离每个州的最后一个元素时间并将它们附加到列表中..所以对于上面的示例,它将是0:15:48
和1:04:30
,因为它们是最后一次特别是。
我知道如何获取列表中的最后一个元素(lst[-1]
)但是在涉及条件时我不太确定如何做到这一点。我不认为我需要将我的元组变成一个列表,因为我没有更改数据,只是试图提取它。
任何帮助表示赞赏。理想情况下没有熊猫。
干杯
答案 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}
这里保存了每个字母的最后一个元素。