<p>您需要一个子类<code>dict</code>专门用于计数事件。该子类已存在:<a href="https://docs.python.org/3/library/collections.html#collections.Counter" rel="nofollow noreferrer">^{<cd2>}</a></p>
<p>请注意<code>Counter</code>与所有<code>dict</code>一样,要求其键是可散列对象,因此:</p>
<ul>
<li>你可以有<code>Counter({("item1","property1"):10, ("item2","property2"):5, ("item3","property3"):4})</code></李>
<li>您不能有<code>Counter({["item1","property1"]:10, ["item2","property2"]:5, ["item3","property3"]:4})</code></李>
</ul>
<p><strong>随机选择计数器演示</strong></p>
<pre class="lang-py prettyprint-override"><code>import collection
import random
l = [('item1', 'property1'), ('item1', 'property1'), ('item1', 'property1'), ('item1', 'property1'), ('item1', 'property1'), ('item1', 'property1'), ('item1', 'property1'), ('item1', 'property1'), ('item1', 'property1'), ('item1', 'property1'), ('item2', 'property2'), ('item2', 'property2'), ('item2', 'property2'), ('item2', 'property2'), ('item2', 'property2'), ('item3', 'property3'), ('item3', 'property3'), ('item3', 'property3'), ('item3', 'property3')]
c = collections.Counter(l)
print(c)
# Counter({('item1', 'property1'): 10, ('item2', 'property2'): 5, ('item3', 'property3'): 4})
for i in range(10):
item, prop = random.choices(list(c.keys()), weights = list(c.values()), k = 1)[0]
print(item, prop, end=', ')
c[(item, prop)] -= 1
# item1 property1, item1 property1, item2 property2,
# item2 property2, item3 property3, item1 property1,
# item1 property1, item3 property3, item1 property1,
# item1 property1,
print(c)
# Counter({('item1', 'property1'): 4, ('item2', 'property2'): 3, ('item3', 'property3'): 2})
</code></pre>
<p><strong>随机样本计数器演示</strong></p>
<pre class="lang-py prettyprint-override"><code>import collections
import random
c = collections.Counter({("item1","property1"):10, ("item2","property2"):5, ("item3","property3"):4})
popped = random.sample(list(c.keys()), 10, counts=list(c.values()))
c = c - collections.Counter(popped)
print(popped)
# [('item2', 'property2'), ('item2', 'property2'), ('item3', 'property3'),
# ('item1', 'property1'), ('item1', 'property1'), ('item1', 'property1'),
# ('item3', 'property3'), ('item1', 'property1'), ('item1', 'property1'),
# ('item3', 'property3')]
print(c)
# Counter({('item1', 'property1'): 5, ('item2', 'property2'): 3, ('item3', 'property3'): 1})
</code></pre>