가 여기에 우리가 값을 추적하는 collections.Counter
를 사용하여 다른 솔루션을 제공, 우리는 드문 키와 값에 관한 일부 가장자리의 경우를 고려 당신을 말할 것이다. 키가 모두 말씨 동일하지 않은 경우
코드
import collections as ct
def compare_missing(d1, d2, verbose=False):
"""Return the count of missing values from dict 2 compared to dict 1."""
record = {}
for k in d1.keys() & d2.keys():
a, b = ct.Counter(d1[k]), ct.Counter(d2[k])
record[k] = a - b
if verbose: print(record)
return sum(v for c in record.values() for v in c.values())
데모
dd0 = ct.defaultdict(list, {"a": ["OS", "sys", "procs"], "b": ["OS", "sys"]})
dd1 = ct.defaultdict(list, {"a": ["OS", "sys"], "b": ["OS"]})
compare_missing(dd0, dd1, True)
# {'a': Counter({'procs': 1}), 'b': Counter({'sys': 1})}
# 2
compare_missing(dd1, dd0, True)
# {'a': Counter(), 'b': Counter()}
# 0
세부
양자리, compare_missing
은 공통 키만 반복합니다. 다음 예에서, 새로운 키 (c
가) dd1
에 추가에도 불구하고, 우리는 위와 같은 결과를 얻을 : 드문 값이나 복제가 (각각 dd3[b]
에서 "admin"
및 "OS"
)를 발견하는 경우
dd2 = ct.defaultdict(list, {"a": ["OS", "sys"], "b": ["OS"], "c": ["OS"]})
compare_missing(dd0, dd2)
# 2
compare_missing(dd2, dd0)
# 0
,이 또한 다음과 같이 계산됩니다.
dd3 = ct.defaultdict(list, {"a": ["OS", "sys"], "b": ["OS", "admin", "OS"]})
compare_missing(dd3, dd0, True)
# {'a': Counter(), 'b': Counter({'OS': 1, 'admin': 1})}
# 2
두 번째 기본 딕트는 항상 첫 번째 defaultdict의 하위 집합으로 보장됩니까? – mgilson