当过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