字典列表中具有最小值的元组

Apr*_*ril 2 python dictionary tuples list min

好吧我正在尝试编写一个函数,它将字典作为参数,并返回一个元组列表,第一个项目作为键,第二个值作为最低值项目.此外,如果字典的值为空,则元组在该位置应该为False.它应该如何工作的例子:

>>> storeDict = {"socks" : [6.99, 4.50, 5.00, 4.99], "shoes" : [14.99,19.99], 
"napkin" : [],"shirt" : [8.99, 7.00, 6.50, 10.25, 8.99]}
>>> LowestPrice(storeDict)
[('shoes', 14.99), ('napkin', False), ('shirt', 6.5), ('socks', 4.5)]
Run Code Online (Sandbox Code Playgroud)

所以我要做的是将字典变成一个列表,并从那里得到最小值,但我不知道如何做到这一点,因为我得到了所有值的列表列表.我也不知道如何将其转换为元组.请帮我!!这是我的代码:

def LowestPrice(storeDict):
valueslist =[]
temp = []
for value in storeDict.values():
    temp=[value]
    valueslist.append(temp)

    for x in valueslist:
        if type(x) == list:
            valueslist.append(min(x))
            minimum = min(values list)
Run Code Online (Sandbox Code Playgroud)

到目前为止,我知道我必须使用.items()将字典转换为列表,但是如何将此列表转换回字典和转换为元组或者最好的方法是什么? ?

Ana*_*mar 5

你说 -

我不知道怎么做,因为我得到了所有值的列表列表

这是因为在将值列表添加到另一个列表之前将其包含在其中valueslist.所以这是一个列表清单.发生在 -

temp=[value]
valueslist.append(temp)
Run Code Online (Sandbox Code Playgroud)

一个简单的方法,通过list comphrension和dict.items()`来做到这一点 -

def lowest_price(store_dict):
    return [(k,min(v)) if len(v) > 0 else (k,False) for k,v in store_dict.items()]
Run Code Online (Sandbox Code Playgroud)

说明 -

  1. dict.items()返回字典的键/值对作为元组列表(或者在Python 3.x中作为视图),因此我们首先在for循环中迭代它.

  2. min(v)返回列表中的最小值,它是Python中的内置函数.

  3. 在列表理解中,我们循环遍历字典的项目,每次获取键/值,并在每个循环中,我们检查值列表的长度是否大于0,如果是这样,我们采取最小值它和(键,最小值)被添加到列表中,否则我们将(键,False)添加到列表中.

上面的for循环方法是 -

def lowest_price(store_dict):
    retlist = []
    for k,v in store_dict.items():
        if len(v) > 0:
            retlist.append((k,min(v)))
        else:
            retlist.append((k,False))
    return retlist
Run Code Online (Sandbox Code Playgroud)

演示 -

>>> def lowest_price(store_dict):
...     return [(k,min(v)) if len(v) > 0 else (k,False) for k,v in store_dict.items()]
...
>>> storeDict = {"socks" : [6.99, 4.50, 5.00, 4.99], "shoes" : [14.99,19.99],
... "napkin" : [],"shirt" : [8.99, 7.00, 6.50, 10.25, 8.99]}
>>>
>>> lowest_price(storeDict)
[('napkin', False), ('shirt', 6.5), ('shoes', 14.99), ('socks', 4.5)]
Run Code Online (Sandbox Code Playgroud)