通过Counter Python

时间:2017-09-27 14:12:05

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

我已阅读并尝试实施Stack Overflow周围的建议。

在Python 3.6+中,我有一个类似于这样的元组列表:

tuple_list=[(a=3,b=gt,c=434),(a=4,b=lodf,c=We),(a=3,b=gt,c=434)]

创建

for row in result:    
    tuple_list.append(var_tuple(row['d'], row['f'], row['q']))

我想计算列表中重复项的数量,然后对列表进行排序,以便重复次数最多的数字位于顶部,因此我使用了

tuple_counter = collections.Counter(tuple(sorted(tup)) for tup in tuple_list)

但这会导致错误,因为

TypeError: unorderable types: int() < str()

我也试过了,但它似乎并没有按最高的柜台排序。

tuple_counter = collections.Counter(tuple_list)
tuple_counter = sorted(tuple_counter, key=lambda x: x[1])

以及

tuple_counter = collections.Counter(tuple_list)
tuple_counter = tuple_counter.most_common()

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

tuple包含不同的type s

tuple_counter = collections.Counter(tuple(sorted(tup)) for tup in tuple_list)

此行错误表示无法订购int < str。在评估任何一个之前,生成器表达式必须是,并且sorted(tup)会立即中断。为什么?从错误中,我确信tup包含整数和字符串。您无法在同一列表中对整数和字符串进行排序,因为您无法将整数和字符串与<进行比较。如果您有比较intstr的方法,请尝试使用sorted(tup, key = function)函数订购intstr s。

由于您希望按出现次数计算,请尝试以下方法:

sorted_tuples = sorted(tuple_list, key = tuple_list.count)

这使用tuple_list的计数器功能作为键对元组进行排序。如果要对降序进行排序,请执行sorted(tuple_list, key = tuple_list.count, reversed = True)