如何通过计算dict中的值来获取密钥?

时间:2017-05-31 01:53:27

标签: python python-3.x

我想找到制造了有史以来最糟糕汽车数量的公司。

输出如下:

 Worst manufacturer: Ford
 Worst manufacturer: Ford
 Worst manufacturer: Triumph

我试过这种方式:

def print_worst_manufacturer(car_dict):
    for k,v in car_dict.items():
        if len(v) > 2:
          print("Worst manufacturer:",k)

def test_print_worst_manufacturer():
    car_dict = {'Amphicar': ['1961'], 'Corvair': ['1961'], 'Horsey':    ['1899'], 'Overland': ['1911'], 'Ford': ['1909', '1958']}
    print_worst_manufacturer(car_dict) 

    car_dict = {'MGA': ['1958'], 'Amphicar': ['1961'], 'Aston': ['1976'], 'Horsey': ['1899'], 'Bricklin': ['1975'], 'Zunndapp': ['1958'], 'Pontiac': ['2001'], 'Chevy': ['1976', '2004'], 'Mosler': ['1985'], 'Lamborghini': ['1986'], 'Peel': ['1966'], 'Ferrari': ['1980'], 'AMC': ['1970', '1978'], 'Yugo': ['1985'], 'BMW': ['2002'], 'Ford': ['1909', '1958', '1971', '1995', '2000'], 'Crosley': ['1949'], 'GM': ['1997'], 'Fuller': ['1933'], 'Chrysler': ['1971'], 'Chrysler/Desoto': ['1934'], 'Corvette': ['1980'], 'Lotus': ['1958'], 'Waterman': ['1957'], 'Overland': ['1911'], 'Triumph': ['1970', '1975'], 'Scripps-Booth': ['1913'], 'King': ['1957'], 'Camaro': ['1982'], 'De': ['1981'], 'Briggs': ['1920'], 'Fiat': ['1998'], 'Corvair': ['1961'], 'Trabant': ['1975'], 'Plymouth': ['1997'], 'Jaguar': ['1974', '2001'], 'Maserati': ['1984'], 'Morgan': ['1975'], 'Hummer': ['2003'], 'Cadillac': ['1981', '1982'], 'Renault': ['1956']}
    print_worst_manufacturer(car_dict)

    car_dict ={'MGA': ['1958'], 'Amphicar': ['1961'], 'Aston': ['1976'], 'Horsey': ['1899'], 'Bricklin': ['1975'], 'Zunndapp': ['1958'], 'Pontiac': ['2001'], 'Chevy': ['1976', '2004'], 'Mosler': ['1985'], 'Lamborghini': ['1986'], 'Peel': ['1966'], 'Ferrari': ['1980'], 'AMC': ['1970', '1978'], 'Yugo': ['1985'], 'BMW': ['2002'], 'Crosley': ['1949'], 'GM': ['1997'], 'Fuller': ['1933'], 'Chrysler': ['1971'], 'Chrysler/Desoto': ['1934'], 'Corvette': ['1980'], 'Lotus': ['1958'], 'Waterman': ['1957'], 'Overland': ['1911'], 'Triumph': ['1970', '1975', 1958], 'Scripps-Booth': ['1913'], 'King': ['1957'], 'Camaro': ['1982'], 'De': ['1981'], 'Briggs': ['1920'], 'Fiat': ['1998'], 'Corvair': ['1961'], 'Trabant': ['1975'], 'Plymouth': ['1997'], 'Jaguar': ['1974', '2001'], 'Maserati': ['1984'], 'Morgan': ['1975'], 'Hummer': ['2003'], 'Cadillac': ['1981', '1982'], 'Renault': ['1956']}
    print_worst_manufacturer(car_dict)

test_print_worst_manufacturer()

输出:

Worst manufacturer: Ford
Worst manufacturer: Triumph

我不确定如何修复我的第一个def功能。

3 个答案:

答案 0 :(得分:1)

您可以使用max作为参数key,如下例所示:

def get_worst(a):
    # For: car_dict2:
    # max(a.items(), key=lambda x: len(x[1]))
    # Will return:
    # ('Ford', ['1909', '1958', '1971', '1995', '2000'])
    # So, we take only the first element
    return max(a.items(), key=lambda x: len(x[1]))[0]

car_dict1 = {'Amphicar': ['1961'], 'Corvair': ['1961'], 'Horsey':    ['1899'], 'Overland': ['1911'], 'Ford': ['1909', '1958']}
car_dict2 = {'MGA': ['1958'], 'Amphicar': ['1961'], 'Aston': ['1976'], 'Horsey': ['1899'], 'Bricklin': ['1975'], 'Zunndapp': ['1958'], 'Pontiac': ['2001'], 'Chevy': ['1976', '2004'], 'Mosler': ['1985'], 'Lamborghini': ['1986'], 'Peel': ['1966'], 'Ferrari': ['1980'], 'AMC': ['1970', '1978'], 'Yugo': ['1985'], 'BMW': ['2002'], 'Ford': ['1909', '1958', '1971', '1995', '2000'], 'Crosley': ['1949'], 'GM': ['1997'], 'Fuller': ['1933'], 'Chrysler': ['1971'], 'Chrysler/Desoto': ['1934'], 'Corvette': ['1980'], 'Lotus': ['1958'], 'Waterman': ['1957'], 'Overland': ['1911'], 'Triumph': ['1970', '1975'], 'Scripps-Booth': ['1913'], 'King': ['1957'], 'Camaro': ['1982'], 'De': ['1981'], 'Briggs': ['1920'], 'Fiat': ['1998'], 'Corvair': ['1961'], 'Trabant': ['1975'], 'Plymouth': ['1997'], 'Jaguar': ['1974', '2001'], 'Maserati': ['1984'], 'Morgan': ['1975'], 'Hummer': ['2003'], 'Cadillac': ['1981', '1982'], 'Renault': ['1956']}
car_dict3 = {'MGA': ['1958'], 'Amphicar': ['1961'], 'Aston': ['1976'], 'Horsey': ['1899'], 'Bricklin': ['1975'], 'Zunndapp': ['1958'], 'Pontiac': ['2001'], 'Chevy': ['1976', '2004'], 'Mosler': ['1985'], 'Lamborghini': ['1986'], 'Peel': ['1966'], 'Ferrari': ['1980'], 'AMC': ['1970', '1978'], 'Yugo': ['1985'], 'BMW': ['2002'], 'Crosley': ['1949'], 'GM': ['1997'], 'Fuller': ['1933'], 'Chrysler': ['1971'], 'Chrysler/Desoto': ['1934'], 'Corvette': ['1980'], 'Lotus': ['1958'], 'Waterman': ['1957'], 'Overland': ['1911'], 'Triumph': ['1970', '1975', 1958], 'Scripps-Booth': ['1913'], 'King': ['1957'], 'Camaro': ['1982'], 'De': ['1981'], 'Briggs': ['1920'], 'Fiat': ['1998'], 'Corvair': ['1961'], 'Trabant': ['1975'], 'Plymouth': ['1997'], 'Jaguar': ['1974', '2001'], 'Maserati': ['1984'], 'Morgan': ['1975'], 'Hummer': ['2003'], 'Cadillac': ['1981', '1982'], 'Renault': ['1956']}


print("car_dict1: Worst manufacturer is:", get_worst(car_dict1))
print("car_dict2: Worst manufacturer is:", get_worst(car_dict2))
print("car_dict3: Worst manufacturer is:", get_worst(car_dict3))

输出:

car_dict1: Worst manufacturer is: Ford
car_dict2: Worst manufacturer is: Ford
car_dict3: Worst manufacturer is: Triumph

答案 1 :(得分:0)

list.count返回参数在列表中出现的次数,但是您要搜索列表中的空字符串,这不会发生:

In [1]: ["a", "b"].count("a")
Out[1]: 1

In [2]: ["a", "b"].count("")
Out[2]: 0

看起来你想要列表的长度(即计算制造商拥有“最差汽车”的年数);请尝试len,它返回列表中元素的数量:

In [3]: len(["a", "b"])
Out[3]: 2

答案 2 :(得分:0)

car_dict = {'MGA': ['1958'], 'Amphicar': ['1961'], 'Aston': ['1976'], 'Horsey': ['1899'], 'Bricklin': ['1975'], 'Zunndapp': ['1958'], 'Pontiac': ['2001'], 'Chevy': ['1976', '2004'], 'Mosler': ['1985'], 'Lamborghini': ['1986'], 'Peel': ['1966'], 'Ferrari': ['1980'], 'AMC': ['1970', '1978'], 'Yugo': ['1985'], 'BMW': ['2002'], 'Ford': ['1909', '1958', '1971', '1995', '2000'], 'Crosley': ['1949'], 'GM': ['1997'], 'Fuller': ['1933'], 'Chrysler': ['1971'], 'Chrysler/Desoto': ['1934'], 'Corvette': ['1980'], 'Lotus': ['1958'], 'Waterman': ['1957'], 'Overland': ['1911'], 'Triumph': ['1970', '1975'], 'Scripps-Booth': ['1913'], 'King': ['1957'], 'Camaro': ['1982'], 'De': ['1981'], 'Briggs': ['1920'], 'Fiat': ['1998'], 'Corvair': ['1961'], 'Trabant': ['1975'], 'Plymouth': ['1997'], 'Jaguar': ['1974', '2001'], 'Maserati': ['1984'], 'Morgan': ['1975'], 'Hummer': ['2003'], 'Cadillac': ['1981', '1982'], 'Renault': ['1956']}

# Transform the dict into a list 

k = car_dict.keys ()
v = car_dict.values ()
car_list = zip (k,v)

# Sort the List: We take the second element of the List items (which is a list of the years) and use its length as the sorting criteria 

car_list.sort (key = lambda x: len (x [1]))

# the last Element in the list is the one with the most years:

print car_list [-1] [0]