我有一个可能重复多次的项目列表。比如说
list = ['a', 'b', 'c', 'd', 'b', 'a', 'c', 'a']
我还有一个列表字典,它为每个键定义了多个值。假设:
dict = {'a':[1, 2], 'b':[3, 4], 'c':[5, 6], 'd':[7, 8]}
我想要能够:
从字典中随机选择一个键值等于原始列表中的值的值,
让这个值在每次键出现时随机选择
我尝试使用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)]
作为旁注,不要使用内置的,如list
和dict
作为你的变量名,因为它们会遮蔽内置的。