Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 字典到具有最小值的元组列表_Python_List_Dictionary_Tuples_Min - Fatal编程技术网

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

Python 字典到具有最小值的元组列表,python,list,dictionary,tuples,min,Python,List,Dictionary,Tuples,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]} >>&g

好的,我正在尝试编写一个函数,它以一个字典作为参数,返回一个元组列表,第一个项作为键,第二个值作为最小值项。此外,如果字典的值为空,则元组在该位置应具有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)
通过list comphrension和dict.items()实现这一点的简单方法是-

解释-

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

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

  • 在列表理解中,我们循环浏览字典中的项目,每次获取键/值,在每个循环中,我们检查值列表的长度是否大于0,如果大于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)
    

    您还可以使用
    (如果len(v)else False,则使用k,min(v)
    。或者甚至
    (k,min(v或[False])
    如果我想在单独的行中执行,然后在末尾返回,我该如何执行?在一行中理解所有内容对我来说有点困难。如果我想在单独的行中完成,然后在最后返回,我该怎么做?对我来说,用一行字来理解这一切有点难。所以如果我想让它看起来像这样:def lost_price(store_dict):newdict={}对于键,store_dict.items()中的值:If len(values)>0:(keys,min(values))else:(keys,False)返回如何返回它?比如,你能不能再添加一些变量和细节,这样就更容易理解了?好的,我当然会对这行的作用进行解释。@April我在答案中添加了解释,还添加了相同的列表理解的for-loop方法。如果v:
    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)