【问题标题】:Hash mapping passing references in Python's dictionary哈希映射在 Python 字典中传递引用
【发布时间】:2020-04-15 23:01:42
【问题描述】:

我有两个函数,即funct#1 和funct#2 (Python 3.x),它们都有相同的返回值。 我是 Python 的新手,对 C/C++ 指针的概念知之甚少。更改一个变量不会反映到另一个变量,除非它不是“按引用传递”,即指针变量。

#<funct#1>

def normalize_vector_list(vector_list):

    normal_vector_list = vector_list

    for idx, vector in enumerate(vector_list):
        vector_normal = cosine_normalization(vector.values())

        for key in vector.keys():
            vector[key] = vector[key]/vector_normal

        normal_vector_list[idx] = vector

    return normal_vector_list



#<funct2>

def normalize_vector_list(vector_list):

    normal_vector_list = vector_list

    for vector in vector_list:
        vector_normal = cosine_normalization(vector.values())

        for key in vector.keys():
            vector[key] = vector[key]/vector_normal

    return normal_vector_list

顺便说一下,上面提到的另一个函数,即 cosine_normalization() 是:

def cosine_normalization(vector):

    return math.sqrt(sum(i**2 for i in vector))

输入参数:vector_list

vector_list 是一个字典列表,其中 vector_list[0] 紧随其后

{'争议':3.2988353690005856,'new':0.8321110382957757,'规则':'专利':27.617294602624597,'基于计算机':'发明':'发明':10.075902209486438,'PUT':1.7977654932882667,'持有'7977654932882667 ': 4.981825347696424, '到期': 2.209272915852394, '最后': 0.8984861072406485, '分钟': 2.5922651681085, '干预': 4.607168188650764, '波兰'2480325}188650764, '波兰'2480359

输出: 输出是 normalized vector_list,其中每个值都通过除以所有值的平方和进行归一化。例如。 normal_vector_list [121] 是{'高速':0.05849977431100451,'net':0.1026094844409006,'连接':0.232742384495927,'证明':0.060052144835127615,'流行':0.03800614678175985,'Ever':0.034539324332692536 ,'报告':0.026431249541766944,'人':0.09935938942455483,'签名':0.04328893168172482,'宽带':0.041893629209266864,'最后':0.012408508988158977,'三':0.03841976800723183 ......}

【问题讨论】:

  • vector_list 是什么?一个小例子就足够了。
  • @afghani_iit 您提到的input 的预期输出和实际输出是多少?问题不清楚。你说的both have same return value是什么意思??
  • @Raj 输出是归一化的vector_list,其中每个值通过除以所有值的平方和来归一化。例如。 normal_vector_list [121]是{ '高速':0.05849977431100451 '净':0.1026094844409006, '连接':0.232742384495927, '证明':0.060052144835127615, '流行':0.03800614678175985 '永远':0.034539324332692536, '报告':0.026431249541766944, '人':0.09935938942455483,'签名':0.04328893168172482,'宽带':0.41893629209266864,'最后':0.012408508988158977,'三':0.031841976800......
  • 你的问题是什么?

标签: python dictionary hashmap pass-by-reference defaultdict


【解决方案1】:

通过将listdict 传递给函数,您传递的是实际对象而不是其副本。

必须先创建对象的copy,然后对其进行操作。

import copy

def normalize_vector_list(vector_list):

    normal_vector_list = copy.deepcopy(vector_list)

    for idx, vector in enumerate(vector_list):
        vector_normal = cosine_normalization(vector.values())

        for key in vector.keys():
            vector[key] = vector[key]/vector_normal

        normal_vector_list[idx] = vector

    return normal_vector_list

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 2012-02-18
    • 2021-04-05
    • 2012-01-31
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多