我有以下字典:
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'
下。
我该怎么做?
答案 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