我想比較嵌套字典。
classes= {
"class1" : {
"name" : "Math",
"hour" : [4,5]
},
"class2" : {
"name" : "Bio",
"hour" : [3,4]
},
"class3" : {
"name" : "Chem",
"hour" : [5,6]
}
}
我需要知道課程重疊的時間。因此,輸出將是這樣的:
Math and Bio overlap at hour 4
Math and Chem overlap at hour 5
uj5u.com熱心網友回復:
您可以制作一個更適合您想要的那種 od 查詢的資料結構。例如,制作帶有小時鍵的字典和這些時間的課程串列。
from collections import defaultdict
classes = {
"class1" : {
"name" : "Math",
"hour" : [4,5]
},
"class2" : {
"name" : "Bio",
"hour" : [3,4]
},
"class3" : {
"name" : "Chem",
"hour" : [5,6]
}
}
hours = defaultdict(list)
for c in classes.values():
for hour in c['hour']:
hours[hour].append(c['name'])
hours將是一個結構,如:
{4: ['Math', 'Bio'], 5: ['Math', 'Chem'], 3: ['Bio'], 6: ['Chem']})
這將讓您在幾個小時內迭代并過濾掉那些不超過一門的課程:
for hour, cs in hours.items():
if len(cs) > 1:
print(f"{' and '.join(cs)} overlap at hour {hour}")
哪個列印:
Math and Bio overlap at hour 4
Math and Chem overlap at hour 5
附帶說明一下,您的字典類可能應該是一個類似[{"name": "Math","hour": [4,5]}, {...}, ...]. 沒有任何語意含義的數字遞增鍵很好地表明了這一點:class1等class2。
uj5u.com熱心網友回復:
假設字典的結構將保持不變,即嵌套字典的鍵的命名約定將是"name"和"hour"類名和類持續時間。此外,假設"hour"嵌套字典的鍵中的兩個值是班級的開始和結束時間,即班級的范圍,則可以通過以下兩個簡單步驟解決問題。
首先,我們定義一個函式,它回傳任意兩個類之間的小時重疊串列,"hour"從嵌套字典中獲取兩個鍵作為輸入。
def get_overlap(l1:list, l2:list):
r1 = range(l1[0], l1[1] 1)
r2 = range(l2[0], l2[1] 1)
return [i for i in r1 if i in r2]
現在,我們遍歷主字典,將每個鍵與其他鍵僅比較一次。即"class1"with ["class2", "class3", "class4"]、"class2"with["class3", "class4"]和"class3"with["class4"]等。我們使用以下代碼執行此操作:
for i, k1 in enumerate(classes):
for k2 in list(classes)[i 1:]:
ovlp = get_overlap(classes[k1]['hour'], classes[k2]['hour'])
if len(ovlp):
print(f"{classes[k1]['name']} and {classes[k2]['name']} overlap at hour(s) {ovlp}")
現在,使用下面給出的字典:
classes= {
"class1" : {
"name" : "Math",
"hour" : [4,5]
},
"class2" : {
"name" : "Bio",
"hour" : [3,4]
},
"class3" : {
"name" : "Chem",
"hour" : [5,6]
},
"class4" : {
"name" : "Phy",
"hour" : [4,6]
}
}
我們得到輸出:
Math and Bio overlap at hour(s) [4]
Math and Chem overlap at hour(s) [5]
Math and Phy overlap at hour(s) [4, 5]
Bio and Phy overlap at hour(s) [4]
Chem and Phy overlap at hour(s) [5, 6]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/434467.html
上一篇:遍歷目錄并將檔案名添加到字典
