python - 将汽车制造商型号年份国家/地区添加到字典中

标签 python python-2.7 python-3.x

这个函数应该循环遍历字典(数据库):

{ 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)]

我也改了extendappend因为您只添加一个项目。

如果我们利用模型列表已经排序的事实,该解决方案可以变得更加高效。有了这个事实,我们可以在检查模型是否存在以及插入新模型时执行二分搜索。

关于python - 将汽车制造商型号年份国家/地区添加到字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40570002/

相关文章:

python - 如何验证从 Cognito CustomUI 登录页面返回的 AWS Cognito session 代码

python - 使用像 VRAM 这样的 python shell(使用 print 绘图)

python - 使用 Python 从文本文件中获取某些单词和短语

python - 使用谷歌应用程序引擎 urlfetch 来自 mandrill 的验证错误

python - 如何在不创建本地文件的情况下将 .xlsx 文件上传到 FTP?

python - 如何克服python中的缩进错误?

python - 导入错误 : cannot import name COMError in python

python - 将带有两个参数的函数传递给 python 中的 filter()

python - 为什么 Python 3 shell 中的文本格式与生成的文本文件不同?

python - 传递cursor.execute mysql 查询中的元素列表