我有以下字典:
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)
您可以执行以下操作:
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()}
但它们都比较容易阅读,所以我现在就把它留给你.如果您有任何问题,请随时询问.