按元组的第一个值的元组的唯一列表

时间:2019-12-13 07:12:51

标签: python python-3.x list tuples unique

如何以最Python的方式按元组的第一个值创建唯一的元组列表?

示例:

list_of_tuples = [('a', 1), ('a', 2), ('b', 3)]

# Apply here magical Pythonic one liner.

print(list_of_tuples)

[('a', 1), ('b', 3)]

4 个答案:

答案 0 :(得分:3)

使用itertools.groupby

[next(g) for _, g in groupby(tups, key=lambda x:x[0])]

输出:

[('a', 1), ('b', 3)]

如果原始列表需要排序:

tups = [('a', 1), ('a', 2), ('b', 3), ('a', 3)]

f = lambda x:x[0]
[next(g) for _, g in groupby(sorted(tups, key=f), key=f)]

输出:

[('a', 1), ('b', 3)]

答案 1 :(得分:1)

这是一只熊猫大班轮:

import pandas as pd
pd.DataFrame([('a', 1), ('a', 2), ('b', 3)]).groupby(0).min().to_dict()[1]                                                                                             
#  {'a': 1, 'b': 3}

答案 2 :(得分:0)

最Python的方法是使用设置的理解力和映射来解决该问题,以获取原始值。就像是 SELECT tasks.* FROM tasks LEFT JOIN priorities ON tasks.priority_identifier LIKE CONCAT('%', priorities.identifier) WHERE priority.id = 10

但是不要误解我的意思,我喜欢chris的回答,它效率更高。我的系统使用double for循环,因此在技术上是可行的,但是可以通过提高效率的方式来实现。

答案 3 :(得分:-2)

字典的构造函数采用元组列表。该对中的第一个元素必须是可哈希的才能起作用:

list(dict(list_of_tuples).items())

更新:该解决方案不仅比@Chris更简单,而且快了近一个数量级。对于在元组中的第一个值几乎总是相同(通常不是相同)并且第一个值大致均匀分布的情况下,我得到following timeits

  

几乎所有相同的第一值:Scott 2.229072586997063,Chris 11.897218765003345
  许多相同的第一值:Scott 2.077339955998468,Chris 10.501757369002007
  甚至分配了第一个值:斯科特2.197656606000237,克里斯9.972954122000374