繁体   English   中英

dict中的Python计数器与dict中选择元素的概率列表

[英]Python Counter in dict vs list in dict probability of choosing an element

我对带Python字典的Counter有疑问。 我使用Counter构建字典(这有助于我构建邻接矩阵)

{48: {Note(note=48, duration=200): 4, Note(note=52, duration=200): 2}}

在此示例中,我使用namedtuple 存储的值48-两倍52-两倍?

让我们用dict中的list做到这一点:

{48: ['48','48','48','48','52','52']}

现在,我将从给定的键中选择一个随机值(48)。 字典中的列表和带计数器的字典的机率是多少? 最好用字典中的清单做到这一点? 有关系吗?

我想知道带计数器的dic提取物是否给我{48: {48,48,48,48}, {52,52}}或仅计数器存储元素数量?

真正的问题是:应该使用哪种方法从密钥中获取随机值? 带列表的字典或带计数器的字典? 一样的?

我担心使用Markov Chain来产生音乐。 我有一组笔记,并建立了词典。

这取决于您如何随机选择元素。

如果您使用random.choice ,那么您想将dict与列表值一起使用。 这是因为当您遍历Counter您仅遍历密钥,因此random.choice(some_counter) some_counter地加权random.choice(some_counter)所有密钥。

如果您使用的Python> = 3.6,则可以使用新的random.choices以其值作为权重来选择键

from random import choices 
from collections import Counter

counts = Counter('Some input iterable')

print(choices(*zip(*counts.items())))
# This gives us a list containing one randomly selected key of counts
# ['e'] for example
# If you want more, you can specify a keyword argument k equal to the number of elements
#   you  want to select form the population (with replacement)

choices(*zip(*counts.items()))是执行类似操作的较短方法

keys = []
values = []
for key, value in counts.items():
    keys.append(key)
    values.append(value)
print(choices(keys, values))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM