[英]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))
编辑:一个字
如果您有多个具有相同最小值的键值对,该怎么办?
该解决方案对此也很好。
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.