繁体   English   中英

最小的元组列表字典

[英]dictionary to list of tuples with smallest value

好的,所以我试图编写一个函数,该函数将字典作为参数并返回一个元组列表,其中第一项是键,第二个值是最低值。 同样,如果字典的值是空的,则元组在该位置应为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()将字典转换为列表,但是如何将这个列表转换回字典和元组,或者最好的方法是?

你说 -

我不知道该怎么做,因为我得到了所有值的清单清单

这是因为在将值列表添加到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()将字典的键/值对返回为元组列表(或在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

演示-

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM