python获取每个键的唯一值计数和键中唯一的值计数

pas*_*ion 2 python dictionary

我有以下字典:

dictA = { 
    'a' : ['duck','duck','goose'], 
    'b' : ['goose','goose'], 
    'c' : ['duck','duck','duck'], 
    'd' : ['goose'], 
    'e' : ['duck','goose'] 
    }
Run Code Online (Sandbox Code Playgroud)

我想得到以下结果:

{
    'duck': {'countALL':3, 'countDoc': {'a': 2, 'b': 0, 'c': 3, 'd': 0, 'e':1}},
    'goose': {'countALL':4, 'countDoc': {'a': 1, 'b': 2, 'c': 0, 'd': 1, 'e':1}},
}   
Run Code Online (Sandbox Code Playgroud)

Ev.*_*nis 6

您可以执行以下操作:

unique_items = set(x for y in dictA.values() for x in y)

new_dict = {}
for item in unique_items:
    new_dict[item] = {'countALL': sum(1 for x in dictA if item in dictA[x]), 'countDoc': {k: v.count(item) for k, v in dictA.items()}}
print(new_dict)
# {'goose': {'countALL': 4, 'countDoc': {'e': 1, 'a': 1, 'c': 0, 'b': 2, 'd': 1}}, 'duck': {'countALL': 3, 'countDoc': {'e': 1, 'a': 2, 'c': 3, 'b': 0, 'd': 0}}}
Run Code Online (Sandbox Code Playgroud)

请注意,内部字典上的顺序是随机的.

这有两点有趣:

  • 发电机表达式计算包含列表item:sum(1 for x in dictA if item in dictA[x]).

  • 以及在每个列表中得到计数的字典理解: {k: v.count(item) for k, v in dictA.items()}

但它们都比较容易阅读,所以我现在就把它留给你.如果您有任何问题,请随时询问.