这个函数应该循环遍历字典(数据库):
{ data_base = {
"Mercedes": [("E-class", 1970, "classic" , "Germany"),("Clk", 2000, "sport" , "Poland")]
"Fiat": [("Uno" , 1980, "coupe" , "Italy")]
"Jaguar" : [("S-type", 2000, "classic", "England"),("X-type", 2005,"luxury", "England")] }
函数接受数据库(上面的示例),将所有其他信息更新到其中。如果其中已有汽车并且所有属性都匹配,则不会重复。另外,按汽车型号按 Asciibetically 排序。函数只更新,不返回。
functionX (data_base,make,model,year,style,country):
for key,value in data_base.items():
if key == make and value[0] != model: # condition to ensure update is not duplicate
database[key].extend((model,year,style,country)):
最佳答案
循环 data_base.items()
时, value
不是你想的那样。它是与汽车品牌相关的型号列表。例如。 [("Uno" , 1980, "coupe" , "Italy")]
对于 key '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
上设置 key 参数来指定排序时要使用的谓词。 (例如 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
因为您只添加一个项目。
如果我们利用模型列表已经排序的事实,该解决方案可以变得更加高效。有了这个事实,我们可以在检查模型是否存在以及插入新模型时执行二分搜索。
关于python - 将汽车制造商型号年份国家/地区添加到字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40570002/