将List中的项替换为Dictionary of Lists中的随机项



我有一个可能重复多次的项目列表。比如说

list = ['a', 'b', 'c', 'd', 'b', 'a', 'c', 'a']

我还有一个列表字典,它为每个键定义了多个值。假设:

dict = {'a':[1, 2], 'b':[3, 4], 'c':[5, 6], 'd':[7, 8]}

我想要能够:

  1. 从字典中随机选择一个键值等于原始列表中的值的值,

  2. 让这个值在每次键出现时随机选择

我尝试使用Pandas从我的列表中创建DataFrame,并利用pd.Series.map()随机映射我的字典,如下所示:

df = pd.DataFrame(list, index = [0,1,2,3,4,5,6,7], columns = ['Letters'])
df['Random_Values'] = df['Letters'].map({k:random.choice(v) for k,v in dict.items()})

输出:

Letters      Random_Values
0       a              1
1       b              3
2       c              5
3       d              7
4       b              3
5       a              1
6       c              5
7       a              1

这段代码成功地随机选择了一个键匹配的值,但它目前随机为每个键选择相同的值(即,'a'的所有实例将始终是1或2,而不是混合)。

我怎么能改变这段代码随机选择值每次键是匹配的?任何建议都很感谢,熊猫不是必需的——如果你有更好的方法来处理列表,我想听听!

您可以简单地使用内置的random.choice和列表推导式:

>>> import random
>>>
>>> my_list = ['a', 'b', 'c', 'd', 'b', 'a', 'c', 'a']
>>> my_dict = {'a':[1,2], 'b':[3,4], 'c':[5,6], 'd':[7,8]}
>>>
>>> [(key, random.choice(my_dict[key])) for key in my_list]
[('a', 2), ('b', 3), ('c', 6), ('d', 8), ('b', 4), ('a', 1), ('c', 6), ('a', 1)]

作为旁注,不要使用内置的,如listdict作为你的变量名,因为它们会遮蔽内置的。

最新更新