我必须对元组列表进行排序,并创建一个字典,其中元组中的第一项作为键,嵌套字典将键作为第二项,出现次数作为值。我不确定如何处理这个问题,任何帮助都是很棒的。
[('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}}发布于 2019-11-15 01:03:32
这不是pythonic式的方法,但至少它是有效的
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}}发布于 2019-11-15 01:20:23
使用setdefault -它很好:
x={}
for a,b in mylist:
c=x.setdefault(a,{})
c[b]=c.setdefault(b,0)+1
print(x)发布于 2019-11-15 01:25:40
您可以使用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}}https://stackoverflow.com/questions/58861769
复制相似问题