从关键字典中的元组列表计算部分

时间:2017-05-01 09:28:44

标签: python-2.7 list dictionary count tuples

我有一个大字典,其中的键由元组值组成,如下所示:

Ft = {('Car', 'Blue', 'C1'): 1, ('Bike', 'Red', 'C3'): 10, ('Car', 'Blue', 'C8'): 7, ('Bike', 'Red', 'C12'): 12. ('Car', 'Blue', 'C13'): 5, ('Bus', 'Blue', 'C14'): 17}

我的目标是计算元组键的前两个值的数量,并将其设置为字典以供进一步计算。目前我就是这样做的:

bcc = [] 
for key, value in Ft.iteritems():
    bcc.append((key[0],key[1]))

>>>print bcc 
[('Car', 'Blue'), ('Bike', 'Red'), ('Car', 'Blue'), ('Bike', 'Red'), ('Car', 'Blue'), ('Bus', 'Blue')]

然后我将使用.count计算de值,如下所示:

Count_appearance = {}
for k in list(set(bcc)):
    Count_quays[k] = bcc.count(k)

>>> print Count_appearance
{('Car', 'Blue'): 3, ('Bike', 'Red'): 2, ('Bus', 'Blue'): 1}

由于我必须在更大的数据集上使用它几次,我觉得它有点'spagetti-coding'首先制作一个列表,然后计算列表。

是否有更简单/更快捷的方法从Ft制作字典Count_appearance?

2 个答案:

答案 0 :(得分:3)

使用collections.Counter子类的简短解决方案:

import collections

Ft = {('Car', 'Blue', 'C1'): 1, ('Bike', 'Red', 'C3'): 10, ('Car', 'Blue', 'C8'): 7, ('Bike', 'Red', 'C12'): 12, ('Car', 'Blue', 'C13'): 5, ('Bus', 'Blue', 'C14'): 17}
counts = dict(collections.Counter(k[:2] for k in Ft))

print counts

输出:

{('Bike', 'Red'): 2, ('Car', 'Blue'): 3, ('Bus', 'Blue'): 1}

答案 1 :(得分:1)

>>> res = {}
>>> for k, v in Ft.items():
...   if (k[:2]) in res:
...      res[k[:2]] += 1
...   else:
...      res[k[:2]] = 1
... 
>>> res
{('Car', 'Blue'): 3, ('Bus', 'Blue'): 1, ('Bike', 'Red'): 2}