如何使用字典创建循环?

2024-04-20 10:31:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手。在

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

给出一个清单:

list1=["a", "b", "a", "c", "a", "b", "c", "d", "e", "a", "b", "d", "e", "a", "c"]

我想找到,对于每一个,比如“a”,每一个项目的百分比都在后面。代码返回:

^{pr2}$

输出是正确的,这正是我想要的。
不过,我还想把不同字典的每一个键加起来,这样我就可以得到如下内容:

[(121, 'a'), (103, 'b'), (94, 'e'), (94, 'd'), (48, 'c')]

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

我试着用

   for key, value in dictio.items():
        dictio[key]=value + dictio.get(key, 0)
        print (dictio)

但结果是一团糟,离我想要的也不远了。在

我想知道你是否可以在不知道字典编号的情况下加入多个字典(因为它们是在for循环中创建的)。在

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

提前谢谢你!在

尼科尔


Tags: 项目方法key代码内容列表for字典
3条回答

只是一种懒洋洋地使用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')]

分类

^{pr2}$

得到百分比(假设)

>>>[(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')]

如果你需要一个列表中每个项目的唯一关注者,你可以考虑只记录每个项目的第一次出现,然后计算它后面的项目,在这种情况下,项目“e”后面将没有新的项目(0%)。但是,如果问题是给定元素之后某一项出现的次数,我将按如下步骤进行:

list1=["a", "b", "a", "c", "a", "b", "c", "d", "e", "a", "b", "d", "e", "a", "c"]
indexlist=[list1.index(item) for item in list(set(list1))]
newlist=[list1[j] for j in sorted(indexlist)]

for item in newlist:
    print '\n',item,'Followers:'
    a=list1[list1.index(item)+1:]
    for follower in a:
        if item!=follower:
            fol=(follower,Counter.get(Counter(a),follower)*100.0/Counter.get(Counter(list1),follower))
    print fol,'round'

下面将对密钥求和并计算百分比:

import collections, itertools

d = collections.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 count, item in itertools.chain.from_iterable(mylist):
    d.update(itertools.repeat(item, count))

print "Usage order:", d.most_common()
lsorted = sorted(d.items())
print "Key order:", lsorted

total = sum(d.values())
print "Percentages:", [(key, (value * 100.0)/total) for key,value in lsorted]

给予:

^{pr2}$

相关问题 更多 >