我对Counter
有一个python词典的问题。我使用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}}
或者仅计数器存储了元素的数量?
真正的问题是: 我应该用哪种方式从密钥中获取随机值? Dict与列表或Dict与计数器?一样的?
我担心马尔可夫链会产生音乐。我有一套笔记,我建了一本字典。
答案 0 :(得分:2)
这取决于您如何随机选择元素。
如果您正在使用random.choice
,那么您希望将dict与列表值一起使用。这是因为当您遍历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))