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逻辑,我不想使用外部库,如果可能的话.
先感谢您!
尼可罗马基
只是懒惰的方式使用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)