根据字典值循环列表元素

时间:2019-09-08 19:45:15

标签: python dictionary arraylist

我有一个以list形式的数字列表,我想将list元素与字典值进行比较

我以两种方式尝试了该解决方案。

lr =[47, 64, 69, 37, 76, 83, 95, 97]
di ={'Jhon':47, 'Emma':69, 'Kelly':76, 'Jason':97}

expected output : after removing unwanted elemnts from list[47, 69, 76, 97]

method 1: ( Success)
lr =[47, 64, 69, 37, 76, 83, 95, 97]
di ={'Jhon':47, 'Emma':69, 'Kelly':76, 'Jason':97}
for i in lr:
    if i in di.values():
        ln.append(i)
print(ln)

===============success========================

**********************************************
Method 2: (Failed)

lr =[47, 64, 69, 37, 76, 83, 95, 97]
di ={'Jhon':47, 'Emma':69, 'Kelly':76, 'Jason':97}
for i in lr:
    if i in di.values():
        pass
    else:
       lr.remove(i)
print(lr)

==================failed=======================

for method 2 i am getting result as [47, 69, 76, 88, 88, 97]
not sure what wrong in the method 2 

1 个答案:

答案 0 :(得分:0)

对第二种方法进行一些修改将为您带来预期的结果。

lr =[47, 64, 69, 37, 76, 83, 95, 97]
di ={'Jhon':47, 'Emma':69, 'Kelly':76, 'Jason':97}
for i in lr[:]: # note the slice notation for creating a copy of list
    if i in di.values():
        pass
    else:
       lr.remove(i)
print(lr)

获取错误值的原因是因为您在迭代列表时修改了列表,如@Lior Cohen指出的那样。

在这里,我添加了其他打印语句以显示您的列表到底发生了什么。观察每次迭代,您将了解为什么在迭代时更改列表是个坏主意。

lr =[47, 64, 69, 37, 76, 83, 95, 97]
di ={'Jhon':47, 'Emma':69, 'Kelly':76, 'Jason':97}
for index, i in enumerate(lr):
    print('Value:',i, 'Index:', index)
    if i in di.values():
        pass
    else:
        lr.remove(i)
    print('List:', lr)

# Output
Value: 47 Index: 0
List: [47, 64, 69, 37, 76, 83, 95, 97]
Value: 64 Index: 1
List: [47, 69, 37, 76, 83, 95, 97]
Value: 37 Index: 2
List: [47, 69, 76, 83, 95, 97]
Value: 83 Index: 3
List: [47, 69, 76, 95, 97]
Value: 97 Index: 4
List: [47, 69, 76, 95, 97]