为什么我不能将值重新分配给字典元素,但可以追加到它?

时间:2019-06-21 11:47:19

标签: python python-3.x list dictionary key

我有一个要求,我必须在字典中基本反转HashMap<String, User> hashUser = new HashMap<String, User>(); hashUser.put(cont, new User(user, password)); hashUser.keySet().stream().forEach((x) -> { System.out.println(hashUser.??); }); keys

如果values已经存在,则应将新元素值附加到现有元素值上。

我为此编写了一个代码。一切正常。但是,如果我重新分配字典项而不是使用新元素而不是附加项,而不是覆盖它,则会创建key来代替值。

这是有效代码:

None
  

正确的输出:{'Stan':['Code.py'],'Randy':['Input.txt','Output.txt']}

以下是给出错误输出的代码:

def group_by_owners(files):
    dt = {}
    for i,j in files.items():
        if j in dt.keys():
            dt[j].append(i) # Just appending the element
        else:
            dt[j]=[i]
    return dt

files = {
    'Input.txt': 'Randy',
    'Code.py': 'Stan',
    'Output.txt': 'Randy'
}   
print(group_by_owners(files))
  

不正确的输出:{'Stan':['Code.py'],'Randy':None}

我不确定重新分配字典元素值和附加现有值之间是否有任何区别。

请澄清。

1 个答案:

答案 0 :(得分:1)

替换您的for循环:

for i,j in files.items():
        if j in dt.keys():
            dt[j] = dt[j].append(i) # Re-assigning the element. This is where the issue is present.
        else:
            dt[j]=[i]

TO

for key, value in files.items():
    # if dictionary has same key append value
    if value in list(dt.keys()):
        dt[value].append(key)
    else:
        dt[value] = [key]

OR

在列表末尾添加一个项目。相当于a [len(a):] = [x]

for key, value in files.items():
    if value in list(dt.keys()):
        dt[value][len(dt[value]):] = [key]
    else:
        dt[value] = [key]

O / P:

{'Randy': ['Input.txt', 'Output.txt'], 'Stan': ['Code.py']}

More details list append method