如何计算列表中子列表的出现次数并将其显示为dict



我有下一个列表:

lst = [["Orange", "Carrot"], ["Green", "Apple"], ["Yellow", "Banana"], ["Orange", "Pumpkin"], ["Green", "Apple"]]

如何将它们显示为以下dict?:

dict_sum = {'Orange': {'Carrot': 1, 'Pumpkin': 1}, 'Green': {'Apple': 2}, 'Yellow': {'Banana': 1}}

您可以使用Counter的默认dict来构建字典:

from collections import defaultdict, Counter
lst = [["Orange", "Carrot"], ["Green", "Apple"], ["Yellow", "Banana"], ["Orange", "Pumpkin"], ["Green", "Apple"]]
d = defaultdict(Counter)
for key, v in lst:
d[key][v] += 1
res = {k: dict(v) for k, v in d.items()}
print(res)

输出

{'Orange': {'Carrot': 1, 'Pumpkin': 1}, 'Green': {'Apple': 2}, 'Yellow': {'Banana': 1}}
lst = [["Orange", "Carrot"], ["Green", "Apple"], ["Yellow", "Banana"], ["Orange", "Pumpkin"], ["Green", "Apple"]]
dict_sum = dict()
for item in lst:
color = item[0]
vegetable = item[1]

# search in dict_sum
if color not in dict_sum:
dict_sum[color] = dict()

# search vegetable in color
if vegetable not in dict_sum[color]:
dict_sum[color][vegetable] = 0
# increase count
dict_sum[color][vegetable] += 1
print(dict_sum)

这不是一个优雅的解决方案,但您可以迭代列表并创建一个字典:

In [14]: lst = [["Orange", "Carrot"], ["Green", "Apple"], ["Yellow", "Banana"], ["Orange", "Pumpkin"], ["Green", "Apple"]]                                                        
In [15]: k = {}                                                                                                                                                                   
In [16]: for elem in lst: 
...:     if k.get(elem[0],None): 
...:         nested = k.get(elem[0]) 
...:         if nested.get(elem[1],None): 
...:             nested[elem[1]] = nested.get(elem[1])+1 
...:         else: 
...:             nested[elem[1]]=1 
...:     else: 
...:         k[elem[0]] = {elem[1]:1} 

{'Orange': {'Carrot': 1, 'Pumpkin': 1},
'Green': {'Apple': 2},
'Yellow': {'Banana': 1}}

最新更新