我有一个大字典,其中的键由元组值组成,如下所示:
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?
答案 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}