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

dictionary to list of tuples with smallest value

好的,所以我正在尝试编写一个函数,它将字典作为参数,returns 一个元组列表,其中第一项作为键,第二个值作为最低值项。此外,如果字典的值为空,则元组在该位置应为 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)]

所以我想做的是将字典变成一个列表,然后它们从那里获得最小值,但我不知道该怎么做,因为我得到了一个包含所有值的列表。我也不知道如何将其转换为元组。请帮我!! 这是我的代码:

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)

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

你说-

I don't know how to do this because I get a list of list for all the values

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

temp=[value]
valueslist.append(temp)

通过列表综合和 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()]

解释-

  1. dict.items() returns key/value 字典对作为元组列表(或在 Python 3.x 中作为一个视图 ) ,所以我们首先在 for 循环中迭代它。

  2. min(v) returns 列表中的最小值,它是 Python.

  3. 中的内置函数
  4. 在列表理解中,我们循环遍历字典的项目,每次都得到key/value,并且在每个循环中,我们检查值列表的长度是否为大于 0 ,如果是这样,我们取它的最小值并将 (key, minimum of value) 添加到列表中,否则我们将 (key, 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

演示 -

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

由于您请求了 for 循环方法

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]}

def lowestPrice(storeDict):
    valueslist =[] # init empty list
    for k,v in storeDict.iteritems(): # iterate dict
        if len(v) > 0: # if list has elements
            valueslist.append((k,min(v))) # find min element and append
        else:
            valueslist.append((k,False)) # append with value = False
    return valueslist

print lowestPrice(storeDict)