我有一個龐大的檔案路徑串列,我正在嘗試為一個專案組織這些檔案路徑。我已將這些檔案路徑分為三類(紅色、綠色和藍色)并將它們放入字典中。現在我想隨機選擇其中的 9 個檔案路徑(每個類別 3 個)并將它們分類到一個較小的輔助字典中。這是到目前為止我用來選擇檔案路徑的代碼,我列印它們只是為了檢查輸出。
counter = 0
while counter < 3:
files = [random.choice(i) for i in colors.values()]
counter = 1
print(files)
由此,我得到 3 個串列,每個串列包含每個類別中的一個。我現在需要做的是將它們分類到一個新字典中:
newDict = {blue1: [],
red1: [],
green1: [],
blue2: [],
red2: [],
green2: [],
blue3: [],
red3: [],
green3: []}
...因此每個密鑰都有一個檔案,并且該檔案仍然屬于相關類別。關于我如何能夠做到這一點的任何建議?提前致謝!
uj5u.com熱心網友回復:
首先我想轉換:
counter = 0
while counter < 3:
files = [random.choice(i) for i in colors.values()]
counter = 1
print(files)
到:
for _ in range(3):
files = [random.choice(i) for i in colors.values()]
print(files)
甚至:
files = [random.choices(files, k=3) for files in colors.values()]
print(files)
現在你想把它們存回去,首先要記住顏色:
files = [(color, random.choices(files, k=3)) for color, files in colors.items()]
print(files)
現在你可以命令式地去:
final_dict = {}
for color, three_files in files:
for i, file in enumerate(three_files, start=1):
final_dict[f"{color}{i}"] = file
或者合并這兩個步驟,不需要files臨時名稱:
final_dict = {}
for color, files in colors.items():
for i, file in enumerate(random.choices(files, k=3), start=1):
final_dict[f"{color}{i}"] = file
但是當我們這樣做時,我們也可以使用字典理解來做到這一點:
final_dict = {
f"{color}{i}": file
for color, files in colors.items()
for i, file in enumerate(random.choices(files, k=3), start=1)
}
uj5u.com熱心網友回復:
編輯:
這應該有效,并避免重復。我正在檢查每種顏色是否有足夠的新檔案,如果沒有,則選擇停止:
colors = {'red': ['file_00', 'file_01', 'file_02', 'file_05'],
'blue': ['file_06', 'file_08', 'file_09', 'file_10'],
'green': ['file_14', 'file_15']}
newDict = {}
for i in range(3):
# check if there are still file names for each color
if any(len(lst) == 0 for lst in colors.values()):
print('Not enough files left!')
break
for color, file_names_list in colors.items():
selected_file = random.choice(file_names_list)
newDict[f'{color}_{i}'] = selected_file
# removing the selected file from the list, so you won't select it again
file_names_list.remove(selected_file)
# just printing the result
for k, v in newDict.items():
print(k, ":", v)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/456012.html
