python - 计算列表中出现的次数[元组]
问题描述
输入:[('Vehicle=Boat', 'Tom'), ('Vehicle=Car', 'Scott'), ('Vehicle=Car', 'Tom'), ('Vehicle=Boat', 'Tom')]
使用以下代码,我可以正确地对输入进行分组,但计算元组中的出现次数会给我带来问题:
def groupBy(seqs, idx=1):
d = dict()
for seq in seqs:
k = seq[idx]
v = d.get(k,tuple()) + (seq[:idx]+seq[idx+1:]) #new dict here where mydict[i] = count.get(i,0) + 1?
d.update({k:v})
return d
回报:
{'Tom': ('Vehicle=Boat', 'Vehicle=Car', 'Vehicle=Boat'), 'Scott': ('Vehicle=Car')}
这很棒,但我希望输出是:
Tom
Vehicle=Boat: 2
Vehicle=Car: 1
Scott
Vehicle=Car: 1
有人可以指出我正确的方向吗?
解决方案
您只需用手将其碾碎:
data = [('Vehicle=Boat', 'Tom'), ('Vehicle=Car', 'Scott'), ('Vehicle=Car', 'Tom'), ('Vehicle=Boat', 'Tom')]
def groupBy(seqs, idx=0):
d = {}
for seq in seqs:
k = seq[idx]
if k not in d:
d[k] = {}
rest = seq[:idx] + seq[idx+1:]
if rest not in d[k]:
d[k][rest] = 0
d[k][rest] += 1
return d
print( groupBy( data, 1 ) )
输出:
{'Tom': {('Vehicle=Boat',): 2, ('Vehicle=Car',): 1}, 'Scott': {('Vehicle=Car',): 1}}
推荐阅读
- sql - 数据库未使用按钮单击事件上的文本框值更新
- flutter-web - Flutter Web:Widget 内的自定义 DatePicker
- mysql - 如何将 docker 容器与主机的 localhost mysql 数据库连接?
- sql - SQL - 查找购买了所有产品的客户
- distributed-computing - Does sidecar topology has to be one to one?
- angularjs - 如何在某些条件下使用 angularjs 中的 $urlRouterProvider.otherwise(" ") 路由到两个页面
- flutter - Flutter:致命错误:回调查找失败!(带有音频播放器包)
- reactjs - 使用全局axios拦截器时如何防止出现多次401错误警告
- python - 如何将“隐藏数据”分配给 Gtk.TreeView 行以便用 Gtk.TreeView.connect("row-activated") 捕获它们?
- r - 加入给定距离的二进制区间