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

标签 python dictionary

我有一个关于Python字典的Counter问题。我使用 Counter 构建字典(它帮助我构建邻接矩阵)

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

我在这个例子中使用namedtuple。存储的值 48 - 四倍 52 - 双倍?

让我们用字典中的列表来做到这一点:

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

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

我想知道 dic 和 counter 的提取给我 {48: {48,48,48,48}, {52,52}} 还是 Counter 只存储元素数量?

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

我使用马尔可夫链来生成音乐。我有一套笔记并建立了一本字典。

最佳答案

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

如果您使用random.choice ,那么您想使用带有列表值的字典。这是因为当您迭代 Counter 时,您只会迭代键,因此 random.choice(some_counter)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))

关于Python 字典中的计数器与字典中的列表选择元素的概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48329959/

相关文章:

python - 如何在 django 中使用模型实例给出文件夹名称

java - 在 Java 中创建常量字符串映射的更简洁方法

ios - 如何将 Microsoft Bing map 导航功能集成到 iPhone 应用程序中?

python - 从另一个字典列表中减去字典列表中的值

python - SqlAlchemy排序问题

python - Alamofire 将 PNG 上传到具有白色背景的 Flask

python - lxml 是否可以以不区分大小写的方式工作?

python - 如何修复 Google Cloud Functions 中/tmp 文件夹中的 "No Such File or Directory"- Python

java - 有没有办法在 Eclipse 中检查映射/设置条目?

java - 如何从同步映射java将映射条目添加到同步/非同步映射