我有一个要求,我必须在字典中基本反转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}
我不确定重新分配字典元素值和附加现有值之间是否有任何区别。
请澄清。
答案 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']}