使用地图功能时出现问题



我目前正试图创建一个函数,该函数通过嵌套字典搜索某个键,然后在第一个元素大于第二个元素的情况下返回元组,而不使用递归或循环。输出应该像这个

input = { 
1: { "A":(41,19), "B":(31,0),  "C":(59,24)}
2: { "C":(10,20) }
3: { "B":(1,2), "C":(4,3)}
}
function(input,'C')
output = [(1: (59,24)),(3:(4,3))]

现在,如果我运行我的代码,我的输出是

[(1: (59,24))]

我的代码如下:

def wins_helper(dict,key,superkey):
output_helper = []
if dict[superkey][key][0] > dict[superkey][key][1]:
output_helper.append(dict[superkey][key])
output_helper.insert(0,superkey)
return output_helper
def get_wins (input_dict,input_key):
superkey_list = list(input_dict.keys())
return list(map(wins_helper,[input_dict],[input_key],superkey_list))

我相信我错误地使用了地图功能,但我不完全确定我需要做什么来修复它

这是解决这个问题的正确方法:

input = { 
1: { "A":(41,19), "B":(31,0),  "C":(59,24)},
2: { "C":(10,20) },
3: { "B":(1,2), "C":(4,3)}
}
def function(dct, val):
for k,v in dct.items():
if val in v and v[val][0] > v[val][1]:
yield (k,v[val] )
print(list(function(input,'C')))

输出:

[(1, (59, 24)), (3, (4, 3))]

或者,对于那些喜欢一句俏皮话的人:

def function(dct, val):
return [(k,v[val]) 
for k,v in dct.items()
if val in v and v[val][0] > v[val][1]]
print(function(input,'C'))

您可以这样做:

k = 'C'
output = [[n, d[k]] for n, d in input.items() if k in d and d[k][0] > d[k][1]]
# [[1, (59, 24)], [3, (4, 3)]]

最新更新