當過data_base.items()
循環,value
是不是你認爲它是。它是與汽車製造相關的模型列表。例如。 [("Uno" , 1980, "coupe" , "Italy")]
爲鑰匙'Fiat'
。因此,對於重複的模型檢查時,您需要遍歷該列表,以確保模型中沒有找到:
def functionX (data_base,make,model,year,style,country):
for key, value in data_base.items():
# first find all the models associated with the make
present_models = set(data[0] for data in value)
if key == make and model not in present_models: # condition to ensure update is not duplicate
database[key].extend((model,year,style,country))
下一點:你不走的事實,你的數據庫是一本字典的優勢。有通過所有的鍵值對不需要循環當我們知道什麼鍵我們感興趣的是我們可以做到以下幾點:。
def functionX (data_base,make,model,year,style,country):
if make in data_base:
present_models = set(data[0] for data in data_base[make])
if model not in present_models:
database[make].extend((model,year,style,country))
else: # make not found so we can just add the info without worrying about duplication
data_base[make] = [(model,year,style,country)]
set(data[0] for data in data_base[make])
創建一組廠名下的型號名稱。您可以將一個集合看作一個不包含重複項的列表。它提供了快速檢查項目是否在集合中(而列表中我們必須逐一檢查每個項目)。創建這個集合的語法在Python中使用列表理解,你可以在這裏閱讀:https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions。
最後,使用sort
可以非常正常地完成排序。默認情況下,Python中的每個模型列表都包含元組和元組,按照字典順序排列(比較第一項,如果相等,則比較第二項等...)。我們希望列表根據元組中的第一項進行排序(所以我們可以在添加新項目後在列表中調用sort
)。通常,您可以通過在sort
上設置關鍵參數(例如sort(my_list, key=<some function>)
)來指定排序時使用的謂詞。
def functionX (data_base,make,model,year,style,country):
if make in data_base:
present_models = set(data[0] for data in data_base[make])
if model not in present_models:
database[make].append((model,year,style,country))
sort(database[make])
else: # make not found so we can just add the info without worrying about duplication
data_base[make] = [(model,year,style,country)]
我也改變extend
到append
,因爲你只添加一個項目。
如果我們利用模型列表已經排序的事實,該解決方案可以變得更高效。有了這個事實,我們可以在檢查模型是否存在以及插入新模型時執行二進制搜索。
我如何處理asciibetical命令? – Wanderer
'sorted(list)'? – furas
好的,謝謝。關於代碼的任何建議? – Wanderer