将值附加到词典列表

2024-09-30 22:21:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将依赖值附加到下面的列表中,并遇到一个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'

Tags: inmaster列表outputif错误currentnum
3条回答

以下是对我有效的版本

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':['']}

您正试图在列表的键存在于字典中之前将其追加到列表中。解决这个问题最简单的方法就是把你的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)

你所拥有的不会给你一个错误,但它也不会做你想做的!你知道吗

你可以尝试以下方法。基本上检查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

相关问题 更多 >