我目前有一个带有key:string的字典string,而值是另一个dict。
在d 字典值中,如何检查哪些键和值都是相同的?
示例字典:
合子书,合子书,合子书是关键。可能有三把以上的钥匙,但我现在只放了两把。然后d的值是另一个具有{文件名: number}的dict。
d = {"zybook":
{
"noodle.json": 5,
"testing.json": 1,
"none.json": 5
},
"zybooks":
{
"noodle.json": 5,
"ok.json": 1
},
"zybookz":
{
"noodle.json": 5
}
}预期输出:
因为{"noodle.json":5} {"noodle.json":5}在zybook、zybooks和zybookz中都是相同的,所以输出将创建另一个具有所有3个匹配的字典。
{"noodle.json": 5}我的尝试:
我真的不知道该怎么处理这个问题。
d = {"zybook": { "noodle.json": 5, "testing.json": 1, "none.json": 5},
"zybooks": {"noodle.json": 5, "ok.json": 1},
"zybookz": {"noodle.json": 5}
}
for key, value in d.items():
for k, v in value.items():
if 发布于 2020-05-14 10:02:09
from functools import reduce
sets = (set(val.items()) for val in d.values())
desired = dict(reduce(set.intersection, sets))
print(desired)
# {'noodle.json': 5}我们首先从每个字典的file_name:num对开始。然后,reduce累积查找每个集合,并通过这些集合的相交将它们简化为期望的结果。最后,根据需要转换为dict。
发布于 2020-05-14 10:01:22
试试这个:
from collections import Counter
res = {z[0]: z[1] for z, count in Counter([(k, v) for x in d for k, v in d[x].items()]).items() if count == len(d)}发布于 2020-05-14 10:45:30
仅使用嵌入式Python方法
new = []
for v in d.values():
new+=list(v.items())
# [('noodle.json', 5), ('testing.json', 1), ('none.json', 5), ('noodle.json', 5), ('ok.json', 1)]
cnt_dict = {v:new.count(v) for v in new}
# {('noodle.json', 5): 3, ('testing.json', 1): 1, ('none.json', 5): 1, ('ok.json', 1): 1}
d2 = {k[0]:k[1] for k,v in cnt_dict.items() if v > 1}
print(d2)
# {'noodle.json': 5}https://stackoverflow.com/questions/61794208
复制相似问题