尝试在嵌套字典中查找最大值,但显示了无法散列的类型:“ dict_keys”错误
假设我有这本字典:
d = {'A': {'a':2, 'b':2, 'c':0},
'B': {'a':2, 'b':0, 'c':1}}
我希望代码返回字典中包含最大值的所有键(即字典A中的最大值为2,并且我希望代码向我返回相应的键:“ a”和“ b')
['a','b']
这是我写的代码:
max_value = max(d[Capital_Alph].values()))
return [key for key, value in d[Capital_Alph].items()
if value == max_value]
答案 0 :(得分:0)
因此,您有一本以str为值,而dict为键的字典,您可以执行以下操作:
d = {'A': {'a':2, 'b':2, 'c':0},
'B': {'a':2, 'b':0, 'c':1}}
print(list(d['A'].keys()))
返回:
['a', 'b', 'c']
[Finished in 0.8s]
这是您要完成的目标的可行解决方案吗?
答案 1 :(得分:0)
不能将不可散列的数据类型用作集合或字典的键。您可以通过以下方式完成任务:
d = {'A': {'a':2, 'b':2, 'c':0},
'B': {'a':2, 'b':0, 'c':1}}
max_v = {k:max(d[k].values()) for k in d } # get the max value of the inner dict
print(max_v)
for inner in max_v:
print("Max keys of dict {} are: {}".format(inner,
[k for k,v in d[inner].items() if v == max_v[inner]]))
输出:
{'A': 2, 'B': 2} # max values of inner dicts
Max keys of dict A are: ['a', 'b']
Max keys of dict B are: ['a']
需要[k for k,v in d[inner].items() if v == max_v[inner]]))
部分来获取所有具有相同最大值的内部键(如果存在多个)。
答案 2 :(得分:0)
代码中有两个错误:)
的计算中有太多max_value
个字符,并且不能在函数外使用return
。
但是,如果我解决了这些问题并执行此操作:
>>> d = {'A': {'a':2, 'b':2, 'c':0},
'B': {'a':2, 'b':0, 'c':1}}
>>> Capital_Alph = "A"
>>> max_value = max(d[Capital_Alph].values())
>>> [key for key, value in d[Capital_Alph].items()
if value == max_value]
['a', 'b']
很明显,这里没有很多其他错误。为了避免使事情复杂化,我没有绕过明显的循环:
for Capital_Alph in d:
,但是您可以自行管理。您的错误消息是因为您试图将Capital_Alph
变成dict_keys
对象,即d.keys()
,并将其用作键。你不能那样做。您必须亲自浏览字典键列表。