首页 > 解决方案 > 使用列表而不是字典来组织结果

问题描述

我试图让我的代码在下面工作,以使结果有条理而不是随机的。

这就是现在正在发生的事情。

sum = 9 count = 117
sum = 6 count = 142
sum = 3 count = 58
sum = 7 count = 172
sum = 8 count = 129
sum = 5 count = 109
sum = 4 count = 87
sum = 11 count = 53
sum = 12 count = 31
sum = 10 count = 72

而我想要实现的是

    sum = 1 count = 117
    sum = 2 count = 142
    sum = 3 count = 58
    sum = 4 count = 172
    sum = 5 count = 129
    sum = 6 count = 109
    sum = 7 count = 87
    sum = 8 count = 53
    sum = 12 count = 31

等。同时省略任何尚未滚动的数字。理想情况下,我希望使用列表而不是字典,但每次尝试时都会遇到不同的错误。目前这会输出金额,但不是按顺序输出。

    import random
    
    print("results")
    occurrences = []
    for i in range(1000):
        die1 = random.randint(1, 6)
        die2 = random.randint(1, 6)
        roll = die1 + die2
        current = occurrences[roll, ]
        occurrences[roll] = current + 1
    
    for roll, count in occurrences[]
        print(f"sum = {roll} count = {count}")

标签: python-3.xlistrandomsum

解决方案


基于字典的滚动发生计数的方法是:

  1. 首先初始化字典中的所有滚动可能性(下面的示例使用字典理解),其中字典是滚动值,字典是相应的出现。

  2. 每次使用+=1语句发生滚动时计数(就地加起来 1)。

  3. 使用对排序后的字典值(这里是每个卷的出现)操作的另一个字典理解对字典进行排序。

  4. 循环遍历字典(滚动)和相应的(出现)以显示输出。

这是包含上述语句的代码

import random

print("results")
occurrences = {k: 0 for k in range(2, 13)}

for i in range(10000):
    die1 = random.randint(1, 6)
    die2 = random.randint(1, 6)
    roll = die1 + die2
    occurrences[roll] += 1

occurrences = {k: v for k, v in sorted(occurrences.items(), key=lambda item: item[1], reverse=True)}

for roll, count in occurrences.items():
    print(f"sum = {roll} count = {count}")

以 10,000 次滚动输出以下​​结果:

sum = 7 count = 1653
sum = 6 count = 1398
sum = 8 count = 1325
sum = 5 count = 1162
sum = 9 count = 1142
sum = 10 count = 842
sum = 4 count = 812
sum = 11 count = 578
sum = 3 count = 540
sum = 2 count = 295
sum = 12 count = 253

推荐阅读