는 사전의 크기에 따라 당신이 (해당 키와 유사하다 다른 키가 없을 수도도) 가능한 각 키에 대한 하나의 키/값 쌍을 가질 것으로 보인다. 당신도 드문 드문 사전
# initialise empty mapping -- literally an empty dict
very_sparse_dict = {}
very_sparse_dict[0] = [(2, 0.5)] # 0 is similar to 2 by 50%
def get_similarity2(d, x, y):
for key, value in d.get(x,()):
if key == y:
return value
return 0
# 0 not linked to 1, so 0% similarity
assert get_similarity2(very_sparse_dict, 0, 1) == 0
# 0 and 2 are similar
assert get_similarity2(very_sparse_dict, 0, 2) == 0.5
# 1 not similar to anything as it is not even present in the dict
assert get_similarity2(very_sparse_dict, 1, 2) == 0
을 구현할 수 있습니다 그리고 각 딕셔너리의 크기 인 dict
의 get
방법을 사용하여, 그러나
# initialise sparse dict with one empty list of similar nodes for each node
sparse_dict = dict((key, []) for key in range(1000))
sparse_dict[0].append((2, 0.5)) # 0 is similar to 2 by 50%
def get_similarity(d, x, y):
for key, value in d[x]:
if key == y:
return value
return 0
assert get_similarity(sparse_dict, 0, 1) == 0
assert get_similarity(sparse_dict, 0, 2) == 0.5
:
난 당신의 코드는 다음과 같이 보입니다 상상 :
>>>> print("sparse_dict:", sys.getsizeof(sparse_dict))
sparse_dict: 49248
>>> print("very_sparse_dict", sys.getsizeof(very_sparse_dict))
very_sparse_dict: 288
사전 키는 많은 공간을 차지할 수 있습니다. 숫자 키가 문제가되는 경우 – Joni
'getsizeof'는 지정된 객체의 크기 만 반환하며 참조하는 객체는 반환하지 않습니다. 즉. 'getsizeof ([1,2])> getsizeof ([[1,2,3,4,5]])'는 첫 번째리스트가 두 개의 원소를 포함하고있는 반면 두 번째 (루트)리스트는 하나의 원소만을 포함하고 있기 때문에 참이다. – Dunes