比较两个列表,它们是dict中的值,并返回列表Python中具有最小值的值

时间:2018-03-23 13:34:47

标签: python dictionary

我有这样的词典

b = {'2': ['10', '5', '4'], '4': ['1', '9', '2'], '3': ['90', '87', '77'], '1': ['30']}

我需要将列表中的每个值与其他值进行比较,并仅在dict中返回最小值

我试过了

for k,v in b.items():
  for r in range(len(v)):
    print(min(v[r] + v[r]))

它给了我一个奇怪的输出! 这是从该代码获得的输出。

0
5
4
1
9
2
0
7
7
0
0
0
0

我需要整个dict输出中值最小的键和值,如d = {4:[1]}

6 个答案:

答案 0 :(得分:1)

丑陋的单行:

b =  {'2': ['10', '5', '4'], '4': ['1', '9', '2'], '3': ['90', '87', '77'], '1': ['30']}
result = dict([min(((int(k), [min(map(int, v))]) for k, v in b.items()), key=lambda t: t[1])])
print(result)

输出:

{4: [1]}

故障:

b =  {'2': ['10', '5', '4'], '4': ['1', '9', '2'], '3': ['90', '87', '77'], '1': ['30']}

# Generator of each key with its minimal element
# (here the generator would produce the list [(2, [4]), (4, [1]), (3, [77]), (1, [30])])
key_min = ((int(k), [min(map(int, v))]) for k, v in b.items())
# Pick tuple with minimal value
# (here the tuple (4, [1]) from the previous generator)
min_entry = min(key_min, key=lambda t: t[1])
# Make into dict
# (here {4: [1]}; first element of the tuple is the key and second element the value)
result = dict([min_entry])
print(result)

答案 1 :(得分:0)

你可以用dict-comprehension

来做
 {int(key): [min( int(value) for value in value_list)] for key, value_list in b.items()}

答案 2 :(得分:0)

如果你想要一个直截了当的答案而没有任何混淆

min_list = {}
for k,v in b.items():
    min_value = min(v)
    min_list[min_value] = k

print({ min_list[min(min_list)]:min(min_list)})

答案 3 :(得分:0)

您想要最小的最小值,或者:

min({k: min(b[k], key=int) for k in b}.items(), key=lambda x: x[1])

返回元组('4', '1')

答案 4 :(得分:0)

首先,您的列表是数字作为文本。我没说错。如果您可以修复它,那么您可以在此代码中取消in()。

 for k, v in b.items():
    x = int(min(b[k]))
    try:
        lowVal
    except:
        lowVal = x
        lowKey = k
    else:
        if x < lowVal:
            lowKey = k
            lowVal = x
 print('{0}: {1}'.format(lowKey, lowVal))
  1. 逐步浏览dict中的每个项目
  2. 找到最低值并使其成为int()并为方便起见设置为x
  3. 试着看看这是否是我们第一次通过,如果将关键设置为lowKey并将列表中的最低值设置为lowVal
  4. 否则,如果lowVal已经存在,请查看列表中当前的最低值是否低于先前的最低值。如果是,则将lowKey和lowVal设置为当前循环值
  5. 打印
  6. ????
  7. 利润
  8. 编辑:一个单词

答案 5 :(得分:0)

如果您有多个具有相同最小值的键值对,该怎么办?

此解决方案也适用于此。

result={k:min(map(int,v)) for k,v in b.items()}
minVal=min(result.values())
result={k:[minVal] for k in result.iterkeys()  if result[k] == minVal}
print(result)
{'4': [1]}

代表:

b = {'2': ['10', '5', '4'], '4': ['1', '9', '2'], '3': ['90', '1', '77'], '1': ['30']}

输出将是:

{'3': [1], '4': [1]}