如何计算与键关联的值的数量

Cri*_*spy 1 python dictionary key find

鉴于以下字典,我想找出哪个键具有最多值.如果我有一个更长的字典并且想要以编程方式知道哪个键具有最多的值(没有目视检查),我将如何去做呢?我能想到的唯一方法如下:

dic = {'attacks': ['kick','puch','slap','elbow'], \
  'defense': ['block','parry','dodge']}
Run Code Online (Sandbox Code Playgroud)

dic = {'attack':['kick','puch','slap','elbow'],'defense':['block','parry','dodge']}

key_values_list = []
for key in dic:
    key_name = ''
    num = 0 
    for item in dic[key]:
        num +=1
    key_values_list.append((key,num))

for  k,v in key_values_list:
    print k,v
Run Code Online (Sandbox Code Playgroud)

jam*_*lak 5

>>> dic = {'attacks': ['kick','puch','slap','elbow'], 'defense': ['block','parry','dodge']}
>>> max(dic, key=lambda k: len(dic[k]))
'attacks'
Run Code Online (Sandbox Code Playgroud)

  • @Crispy:或者,`max(len(v)for v in dic.itervalues())`. (2认同)

app*_*tor 5

以下代码将计算标记为攻击的密钥的实例:

>>> max(((k, len(v)) for k, v in dic.items()), key=lambda x: x[1])
('attacks', 4)
>>>
Run Code Online (Sandbox Code Playgroud)

  • 你可以使用`operator.itemgetter`而不是键的`lambda`,或者你可以在第一个位置反过来构造元组,并依赖于元组的自然排序顺序. (2认同)