我正在尝试将依赖值附加到列表中,如下所示并运行到一个keyerror中......我的预期输出低于......如果有人在这里提供错误的输入吗?
'''
Current output without "+=" in internal_dep[num] +=dep_gerrit :-
{'313137': '12345', '99999': '', '34567': '99999', '12345': '34567'}
EXPECTED OUTPUT:-
{'313137': ['12345', '34567': '99999']}
'''
def findinternaldep(num):
if num == '313137':
output ='12345'
if num == '12345':
output = '34567'
if num == '34567':
output = '99999'
if num == '99999':
output = ''
return output
master_gerrit = ['313137']
internal_dep={}
for num in master_gerrit:
while True:
print "NUM"
print num
(dep_gerrit)=findinternaldep(num)
internal_dep[num] +=dep_gerrit
num = dep_gerrit
if dep_gerrit == '':
break
print internal_dep
错误: -
Traceback (most recent call last):
File "test_internal.py", line 34, in <module>
internal_dep[num] +=dep_gerrit
KeyError: '313137'
答案 0 :(得分:3)
您尝试在字典中存在其键之前附加到列表。解决此问题的最简单方法是将internal_dep
字典设为collections.defaultdict
。然后,如果该密钥尚不存在,则将自动创建默认值(您可以指定)。
import collections
internal_dep = collections.defaultdict(list)
另请注意,+=
相当于list.extend
而非list.append
,因此您应使用以下其中一项:
internal_dep[num] += [dep_gerrit] # or
internal_dep[num].append(dep_gerrit)
你所拥有的不会给你一个错误,但它也不会做你想要的!
答案 1 :(得分:0)
您可以尝试以下方法。基本上检查dict是否已经有密钥,如果没有添加新密钥,则附加到列表中。
if internal_dep.has_key(num):
internal_dep[num].append(dep_gerrit)
else:
internal_dep[num]=[dep_gerrit,]
通过此更改,您的整体代码如下所示:
mmaster_gerrit = ['313137']
internal_dep={}
for num in master_gerrit:
while True:
print "NUM"
print num
(dep_gerrit)=findinternaldep(num)
print "DEP_GERRIT"
print dep_gerrit
#print master_gerrit
#print dep_gerrit
#print depgerrit_status
if internal_dep.has_key(num):
internal_dep[num].append(dep_gerrit)
else:
internal_dep[num]=[dep_gerrit,]
num = dep_gerrit
if dep_gerrit == '':
break
print internal_dep
答案 2 :(得分:0)
以下是适用于我的版本
list = ['313137','253036']
internal_dep={}
for num in list:
master_gerrit = num
while True:
print "NUM"
print num
(dep_gerrit)=findinternaldep(num)
print "DEP_GERRIT"
print dep_gerrit
#print master_gerrit
print dep_gerrit
if internal_dep.has_key(master_gerrit):
internal_dep[master_gerrit].append(dep_gerrit)
else:
internal_dep[num]=[dep_gerrit,]
if dep_gerrit == '':
break
num = dep_gerrit
print internal_dep
输出: - {'313137':['12345','34567','99999',''],'253036':['']}