繁体   English   中英

如何计算元组列表并将变量的频率导出到字典中?

[英]How do you count a tuple list and export the frequency of the variables into a dictionary?

我一直在研究一种分配的解决方案,其中我们接受一个元组对象列表并返回一个包含该列表中所有字符串出现频率的字典

所以我一直在尝试使用Collection中的Counter来计算元组列表中出现的键的频率

tuple_list = [('a',5), ('a',5), ('b',6), ('b',4), ('b',3), ('b',7)]

我不能让Counter仅检查'a'或'b'还是仅检查列表中的字符串。

from collections import Counter
def get_frequency(tuple_list): 
     C = Counter(new_list)
     print (C('a'), C('b')) 

 tuple_list = [('a',5), ('a',5), ('b',6), ('b',4), ('b',3), ('b',7)]
 freq_dict = get_frequency(tuple_list)
 for key in sorted(freq_dict.keys()):
    print("{}: {}".format(key, freq_dict[key]))

我期望的输出应该是a: 2 b: 4但是我一直得到a: 0 b: 0

由于每个元组中的第二个(数字)元素似乎无关紧要,因此您需要传递要计算的字母序列。 尝试列表理解:

>>> tuple_list = [('a',5), ('a',5), ('b',6), ('b',4), ('b',3), ('b',7)]
>>>
>>> items = [item[0] for item in tuple_list]
>>> items
['a', 'a', 'b', 'b', 'b', 'b']

>>> from collections import Counter
>>> c = Counter(items)
>>> print(c)
Counter({'b': 4, 'a': 2})

如果您不想使用计数器,则可以像这样使用列表的长度...

unique_values = list(set([x[0] for x in tuple_list]))
a_dict = {}
for v in unique_values:
    a_dict[v] = len([x[1] for x in tuple_list if x[0] == v])

print(a_dict)

这给你:

{'b': 4, 'a': 2}

由于只希望对每个元组中的第一个元素(字符串)进行计数,因此,仅应在该第一个元素上使用counter对象,如下面的get_frequency函数所示:

def get_frequency(tuple_list):
    cnt = Counter()
    for tuple_elem in tuple_list:
        cnt[tuple_elem[0]] += 1
    return cnt

tuple_list = [('a',5), ('a',5), ('b',6)]
freq_dict = get_frequency(tuple_list)

for key, value in freq_dict.items():
    print(f'{key}: {value}')

另外,请确保如果希望从函数接收值,则通常需要使用return语句返回值。

希望有帮助!

另一个解决方案是使用zipnext使用next将每个元组的第一项提取到新的元组中,并将其输入Counter

from collections import Counter
result = Counter(next(zip(*items)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM