纠正无法散列的类型:'dict_keys'

时间:2019-01-27 19:58:30

标签: python python-3.x

尝试在嵌套字典中查找最大值,但显示了无法散列的类型:“ 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]

3 个答案:

答案 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(),并将其用作键。你不能那样做。您必须亲自浏览字典键列表。