簡體   English   中英

用列表詞典中的隨機項目替換列表中的項目

[英]Replace Items in List with Random Items from 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. 隨機 select 字典中的一個值,其中鍵等於原始列表中的值,並且

  2. 在列表中的每個鍵出現時隨機選擇此值。

我嘗試使用Pandas從我的列表中創建一個DataFrame ,並利用pd.Series.map()隨機生成我的字典 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()})

Output:

         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,而不是混合)。

每次匹配密鑰時,如何將此代碼更改為隨機 select 值? 任何建議表示贊賞,Pandas 不是必需的 - 如果您有更好的方法,我想聽聽!

您可以簡單地使用內置的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等內置函數作為變量名,因為它們會隱藏內置函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM