根据Python中的条件在字典中返回最大值的键

时间:2019-06-17 07:58:56

标签: python python-3.x dictionary max

我有以下字典:

d = {'a': {'0': 'London', '1': 'Athens', '2': 'Paris', '3': 'London'},
 'b': {'0': 1, '1': 2, '2': 3, '3': 2}}

d['a']d['b']中的键是相同的。

我想返回子词典d['b']中具有最高值的键,而该键在子词典d['a']中具有特定值。

例如,如果我将输入'London'设置为输入,则它应返回'3',因为'London'在键'0''3'中,并且字典'b'中这些键的最高值在键'3'下。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

您有一些选择。假设您不想使用更合适的结构,则可以从找到与London匹配的键开始:

d = {
     'a': {'0': 'London', '1': 'Athens', '2': 'Paris', '3': 'London'},
     'b': {'0': 1, '1': 2, '2': 3, '3': 2}
}
a = d['a']
b = d['b']

keys = [k for k in a if a[k] == 'London']

然后,您可以对结果运行max

max(keys, key=lambda k: b[k])

单线:

max((k for k in a if a[k] == 'London'), key=lambda k: b[k])

此方法的问题是您正在按值查找字典,这在很大程度上与提出字典的提议背道而驰。如果您可以自由修改字典a,请对其进行反转:

from collections import defaultdict
a_better = defaultdict(list)
for v, k in a.items():
    a_better[k].append(v)

现在查找更加简单:

max(a_better['London'], key=lambda k: b[k])

答案 1 :(得分:-1)

一种解决方案是从a获取密钥,然后像这样在b中进行搜索:

d = {'a': {'0': 'London', '1': 'Athens', '2': 'Paris', '3': 'London'},
 'b': {'0': 1, '1': 2, '2': 3, '3': 2}}

input_value = str(raw_input("enter a value")) #This is for 2.7 . If u use 3+ change raw_input to input
find_max = []
for key, value in d.items():
    for key1,value1 in value.items():
        if value1 == input_value:
            find_max.append(key1)

print(find_max) # for London return ['0','3']
max_value = max(find_max) 
print (max_value) # print 3
for all in max_value:
    a = max(all, key=lambda k: d['b'])
    print (a) # print 3