Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用for循环填充字典_Python_For Loop_Dictionary - Fatal编程技术网

Python 使用for循环填充字典

Python 使用for循环填充字典,python,for-loop,dictionary,Python,For Loop,Dictionary,使用下面的代码生成我命名为“appInfo”的词典时遇到一些问题。这样运行时,只有最后输入的应用程序编号保存在appInfo字典中。看起来应该很容易,但我还没找到解决办法。我正在使用Python 3.5.2 appDict={'AA':{'appType':'app name one','fileLoc':'C:\\app1.docx'}, 'BB':{'appType':'app name two','fileLoc':'C:\\app2.docx'}, 'CC':{'ap

使用下面的代码生成我命名为“appInfo”的词典时遇到一些问题。这样运行时,只有最后输入的应用程序编号保存在appInfo字典中。看起来应该很容易,但我还没找到解决办法。我正在使用Python 3.5.2

appDict={'AA':{'appType':'app name one','fileLoc':'C:\\app1.docx'},
     'BB':{'appType':'app name two','fileLoc':'C:\\app2.docx'},
     'CC':{'appType':'app name three','baseDoc':'C:\\app3.docx'},
     'DD':{'appType':'app name four','baseDoc':'C:\\app4.docx'},
     'EE':{'appType':'app name five','baseDoc':'C:\\app5.docx'},
     'FF':{'appType':'app name six','baseDoc':'C:\\app6.docx'}}
appInfo=dict()
appNumList=[]
while True:
    print('Enter an application number (XX-00-00). Press Enter to stop:')
    appNum=str(input())
    if appNum=='':
        break
    appNumList=appNumList+[appNum]
    appShow='/'.join(appNumList)
    appNumLength=len(appNumList)
    appNumSep=re.compile(r'[A-Z]+')
    mo=appNumSep.findall(appNum)
for num in appDict.keys():
    if num in mo:
        appInfo[num]=appDict[num]
print(appInfo)

数组mo在while循环的每次迭代中都会被覆盖。在appDict.keys()中循环时,mo仅包含最近的输入。我想你的意思是这样附加到mo

appDict={'AA':{'appType':'app name one','fileLoc':'C:\\app1.docx'},
     'BB':{'appType':'app name two','fileLoc':'C:\\app2.docx'},
     'CC':{'appType':'app name three','baseDoc':'C:\\app3.docx'},
     'DD':{'appType':'app name four','baseDoc':'C:\\app4.docx'},
     'EE':{'appType':'app name five','baseDoc':'C:\\app5.docx'},
     'FF':{'appType':'app name six','baseDoc':'C:\\app6.docx'}}
appInfo=dict()
appNumList=[]
mo=[]

while True:
    print('Enter an application number (XX-00-00). Press Enter to stop:')
    appNum=str(input())
    if appNum=='':
        break
    appNumList=appNumList+[appNum]
    appShow='/'.join(appNumList)
    appNumLength=len(appNumList)
    appNumSep=re.compile(r'[A-Z]+')
    mo.append(''.join(appNumSep.findall(appNum))

for num in appDict.keys():
    if num in mo:
        appInfo[num]=appDict[num]

print(appInfo)

“mo=appNumSep.findall(appNum)”可以在每次迭代时重置值。旁注:一般来说,尤其是在Python 2中,您很少想使用dict的
方法
dict
s已经是其键的可编辑项,因此appDict:
中的num的
for获得相同的结果(并避免创建一个临时
列表,其中包含Python 2中
键的浅拷贝;在Python 3中,它只避免创建一个简单的包装器对象)。当然,由于您也需要该值,因此您应该真正迭代以下项:
对于num,appDict.items()中的val:
.viewitems()
在Py2中以避免复制)
如果mo中的num:appInfo[num]=val
。这是一个有趣的捕获。我的mo阵列现在运行正常,但appInfo完全为空。感谢您在我的问题填充代码中找到这个问题!我更改了append()行。我在追加findall()返回的数组,但没有将其合并到单个字符串中。编辑后的代码应该可以工作。