繁体   English   中英

比较两个是dict中值的列表,然后返回在列表Python中具有最小值的值

[英]Compare two lists which are values in a dict and return which has the min val in the list Python

我有这样的字典

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

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

我努力了

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

丑陋的单线:

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)

您可以通过dict理解来做到这一点

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

如果您想要一个简单明了的答案而没有任何困惑

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

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

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

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

首先,您的列表是数字作为文本。 我没有纠正。 如果可以解决该问题,则可以删除此代码中的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. 逐步检查字典中的每个项目
  2. 找到最小值并将其设为int()并设置为x为方便
  3. 尝试查看这是否是我们的第一次,是否将键设置为lowKey并将列表中的最小值设置为lowVal
  4. 否则,如果lowVal已经存在,请查看列表中的当前最低值是否低于先前的最低值。 如果将其设置为当前循环值的lowKey和lowVal
  5. 打印
  6. ????
  7. 利润

编辑:一个字

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

该解决方案对此也很好。

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

暂无
暂无

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

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