从元组创建嵌套字典,该字典统计元组项的出现次数

2024-04-24 19:39:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须对元组列表进行排序,并创建一个字典,其中元组中的第一项作为键,嵌套字典将键作为第二项,出现次数作为值。我不知道如何解决这个问题,任何帮助都会很好。你知道吗

[('academic', 'hacked'), ('academic', 'lost device'), ('academic', 'lost device'), ('academic', 'lost device'), ('energy', 'inside job'), ('financial', 'hacked')]

期望输出:

{'academic': {'lost device': 3, 'hacked': 1}, 'energy': {'inside job': 1}, 'financial': {'hacked': 1}}

Tags: 列表字典排序devicejob次数energy元组
3条回答

使用setdefault很好:

x={}
for a,b in mylist:
   c=x.setdefault(a,{})
   c[b]=c.setdefault(b,0)+1
print(x)

您可以使用Collections.Counter在一行中执行此操作,如下所示。这里,vals是元组列表。你知道吗

from collections import Counter
dict((k[0],{k[1]:v})for k, v in Counter(vals).items())

解决方案

from collections import Counter
vals = [('academic', 'hacked'), ('academic', 'lost device'), ('academic', 'lost device'), 
        ('academic', 'lost device'), ('energy', 'inside job'), ('financial', 'hacked')]

output = dict((k[0],{k[1]:v})for k, v in Counter(vals).items())
print(output)

结果

{'academic': {'hacked': 1, 'lost device': 3}, 'energy': {'inside job': 1}, 'financial': {'hacked': 1}}

这不是Python式的方法,但至少是有效的

mylist = [('academic', 'hacked'), ('academic', 'lost device'), ('academic', 'lost device'), ('academic', 'lost device'), ('energy', 'inside job'), ('financial', 'hacked')]        

dict = {}
for el in mylist:
  if not el[0] in dict.keys():
    dict[el[0]] = {}
  if not el[1] in dict[el[0]].keys():
    dict[el[0]][el[1]] = 1
  else:
    dict[el[0]][el[1]] += 1        
print (dict)

结果我得到:

{'academic': {'hacked': 1, 'lost device': 3}, 'energy': {'inside job': 1}, 'financial': {'hacked': 1}}

相关问题 更多 >