如何加入用for循环创建的词典?

Nic*_*olò -3 python iteration dictionary loops list

我是Python的新手.

我创建了一个代码,可以让我找到列表中给定项目后面的项目百分比.

给出一个清单:

list1=["a", "b", "a", "c", "a", "b", "c", "d", "e", "a", "b", "d", "e", "a", "c"]
Run Code Online (Sandbox Code Playgroud)

我想为每个人找一个"a",其中每个项目的百分比都在跟随.代码返回:

[(33, 'a'), (25, 'b'), (16, 'e'), (16, 'd'), (16, 'c')]
[(30, 'a'), (20, 'e'), (20, 'd'), (20, 'c'), (20, 'b')]
[(25, 'e'), (25, 'd'), (25, 'b'), (25, 'a'), (12, 'c')]
[(33, 'e'), (33, 'd'), (33, 'b'), (33, 'a')]
[]  
Run Code Online (Sandbox Code Playgroud)

输出是正确的,这就是我想要的.
但我还想总结不同词典的每一个关键词,所以我可以得到类似的东西:

[(121, 'a'), (103, 'b'), (94, 'e'), (94, 'd'), (48, 'c')]
Run Code Online (Sandbox Code Playgroud)

我没有办法做到这一点.我知道有一些方法可以对不同字典中每个键的值进行求和,但问题是字典是在for循环中创建的,因为我需要尽可能多的目标项目(在本例中为"a") .

我尝试用每个字典迭代

   for key, value in dictio.items():
        dictio[key]=value + dictio.get(key, 0)
        print (dictio)
Run Code Online (Sandbox Code Playgroud)

但结果是一团糟,它与我想要的东西相差甚远.

我想知道你是否有可能加入多个字典,而不知道它们的编号(因为它们是在for循环中创建的).

而且,由于我想了解更好的Python逻辑,我不想使用外部库,如果可能的话.

先感谢您!

尼可罗马基

itz*_*nTV 6

只是懒惰的方式使用Counter

from collections import Counter
d = Counter()


mylist = [[(33, 'a'), (25, 'b'), (16, 'e'), (16, 'd'), (16, 'c')],
            [(30, 'a'), (20, 'e'), (20, 'd'), (20, 'c'), (20, 'b')],
            [(25, 'e'), (25, 'd'), (25, 'b'), (25, 'a'), (12, 'c')],
            [(33, 'e'), (33, 'd'), (33, 'b'), (33, 'a')],
            []]

for i in mylist:
    d.update(dict([(m,n) for n,m in i]))
>>>[(j,i) for i,j in d.items()]
[(121, 'a'), (48, 'c'), (103, 'b'), (94, 'e'), (94, 'd')]
Run Code Online (Sandbox Code Playgroud)

排序

>>>sorted([(j,i) for i,j in d.items()], key=lambda x:x[1])
[(121, 'a'), (103, 'b'), (48, 'c'), (94, 'd'), (94, 'e')]
Run Code Online (Sandbox Code Playgroud)

获得百分比(假设)

>>>[(j*100/sum(d.values()),i) for i,j in d.items()] # caution==> sum(d.values()) save in a variable, otherwise it will execute in every iteration
[(26, 'a'), (10, 'c'), (22, 'b'), (20, 'e'), (20, 'd')]
Run Code Online (Sandbox Code Playgroud)