[英]Shuffle dictionaries of sets in Python
我正在嘗試對集合的字典進行洗牌。 這是我想隨機洗牌的集合
{'1': ['IMG_0001.png', 'IMG_0002.png', 'IMG_0003.png', 'IMG_0004.png'],
'2': ['IMG_0020.png', 'IMG_0021.png', 'IMG_0022.png', 'IMG_0023.png'],
'3': ['IMG_0051.png', 'IMG_0052.png', 'IMG_0053.png', 'IMG_0054.png']}
Output 應該有點像下面這樣
{'1': ['IMG_0001.png', 'IMG_0002.png', 'IMG_0053.png', 'IMG_0054.png'],
'2': ['IMG_0020.png', 'IMG_0021.png', 'IMG_0022.png', 'IMG_0023.png'],
'3': ['IMG_0003.png', 'IMG_0004.png', 'IMG_0051.png', 'IMG_0052.png']}
嘗試在 python 中使用 random.shuffle() 但未達到預期效果。 誰能幫我。 我是 python 的新手。 謝謝您的幫助。
如果每個列表應該具有相同的大小,並且您希望將列表中的所有元素相互打亂,您可以使用以下 function:
import random
import itertools
def shuffle(original: dict) -> dict:
all_elements = list(itertools.chain.from_iterable(original.values()))
m = len(all_elements) // len(original) # list size
random.shuffle(all_elements)
return {k: all_elements[i*m : (i+1)*m] for i, k in enumerate(original)}
或者,使用more-itertools
package:
import random
import itertools
import more_itertools
def shuffle(original: dict) -> dict:
all_elements = list(itertools.chain.from_iterable(original.values()))
list_length = len(all_elements) // len(original)
random.shuffle(all_elements)
return {k: l for k, l in more_itertools.sliced(all_elements, n=list_length)}
示例用法:
d = {
"1": ["IMG_0001.png", "IMG_0002.png", "IMG_0003.png", "IMG_0004.png"],
"2": ["IMG_0020.png", "IMG_0021.png", "IMG_0022.png", "IMG_0023.png"],
"3": ["IMG_0051.png", "IMG_0052.png", "IMG_0053.png", "IMG_0054.png"],
}
print(shuffle(d))
{'1': ['IMG_0023.png', 'IMG_0003.png', 'IMG_0021.png', 'IMG_0001.png'],
'2': ['IMG_0053.png', 'IMG_0051.png', 'IMG_0052.png', 'IMG_0004.png'],
'3': ['IMG_0054.png', 'IMG_0022.png', 'IMG_0002.png', 'IMG_0020.png']}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.