迭代列表和字典时出现错误

时间:2017-06-03 12:51:11

标签: python indentation

import os
import sys

lst = ["ABCD", "LMN" , "STU" , "PQRS" ]

dict = { 'ABCD':'kajal' , 'LMN' :'John' , 'PQRS' : 'Anni'}

for i in lst:
    for k,l in dict.items():
        if i == k:
            print(i,l)
        else:
            print(i,"no id")

输出:

('ABCD', 'kajal')
('ABCD', 'no id')
('ABCD', 'no id')
('LMN', 'no id')
('LMN', 'no id')
('LMN', 'John')
('STU', 'no id')
('STU', 'no id')
('STU', 'no id')
('PQRS', 'no id')
('PQRS', 'Anni')
('PQRS', 'no id')

预期产出:

('ABCD', 'kajal')
('LMN', 'John')
('STU', 'no id')
('PQRS', 'Anni')

4 个答案:

答案 0 :(得分:0)

你的工作不起作用的原因是因为你要检查每个项目三次,你只需要检查一次。

对于列表中的每个项目,您将根据字典中的每个键/值对进行检查;由于有三个键,因此列表中的每个项目都有三个输出。

尝试简单的事情:

for i in lst:
   print(tuple(i, dict.get(i, 'no id')))

答案 1 :(得分:0)

首先,避免使用dict之类的变量名称 - 它会屏蔽具有相同名称的标准函数。您在列表中迭代一次,然后在字典中迭代。这是另一种方法:

lst = ["ABCD", "LMN" , "STU" , "PQRS" ]

mydict = { 'ABCD':'kajal' , 'LMN' :'John' , 'PQRS' : 'Anni'}

for i in lst:
    if i in mydict:
        print(i,mydict[i])
    else:
        print(i,"no id")

使用in关键字测试来确定是否存在密钥。

顺便说一下,输出中( )的存在表明你在python 2中使用了print语句的python 3语法。

答案 2 :(得分:0)

import os
import sys

lst = ["ABCD", "LMN" , "STU" , "PQRS" ]

dict = { 'ABCD':'kajal' , 'LMN' :'John' , 'PQRS' : 'Anni'}

for i in lst:
    if i in dict:
        print(i, dict[i])
    else:
        print(i, "no id")

简单地说,你也遍历了dict,因此多个entiries

答案 3 :(得分:0)

def list_from_dict(id, dictionary):
    if id in dictionary.keys():
        return id, dictionary[id]
    else:
        return id,"no id"

lst = ["ABCD", "LMN" , "STU" , "PQRS" ]
dic = { 'ABCD':'kajal' , 'LMN' :'John' , 'PQRS' : 'Anni'}

for items in lst:
    print(list_from_dict(items,dic))