如何统计列表中子列表的出现次数并将其显示为字典

3

我有以下列表:

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

如何将它们显示为以下字典形式?
dict_sum = {'Orange': {'Carrot': 1, 'Pumpkin': 1}, 'Green': {'Apple': 2}, 'Yellow': {'Banana': 1}}

我假设 P. Carrot 是打错字了,应该改为 Carrot,对吗? - Juan C
3个回答

7

你可以使用一个defaultdict和一个Counter来构建这个字典:

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}}

2
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)

1
不是一个优雅的解决方案,但您可以遍历列表并创建字典:
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}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接