如何在Python中对许多字典应用某些操作(或:如何在for循环中修改ot字典)

时间:2018-10-15 11:07:02

标签: python python-2.7 dictionary

如果我有很多要修改的字典(例如,要过滤掉所有字典中的某些值),该如何以高效/ Python的方式进行?

在下面的示例中,循环内的过滤操作有效,但实际的字典未更改/不受影响:

d1 = {key:val for key, val in zip(('a', 'b', 'c', 'd', 'e'), range(5))}
d2 = {key:val for key, val in zip(('a', 'b', 'c', 'd', 'e'), range(4, 9))}

for d in (d1, d2):
    print d
    d = {key: d[key] for key in d if d[key] != 4}
    print d
print d1
print d2

# {'a': 0, 'c': 2, 'b': 1, 'e': 4, 'd': 3}
# {'a': 0, 'c': 2, 'b': 1, 'd': 3}
# {'a': 4, 'c': 6, 'b': 5, 'e': 8, 'd': 7}
# {'c': 6, 'b': 5, 'e': 8, 'd': 7}
# {'a': 0, 'c': 2, 'b': 1, 'e': 4, 'd': 3}
# {'a': 4, 'c': 6, 'b': 5, 'e': 8, 'd': 7}

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

d1 = {key:val for key, val in zip(('a', 'b', 'c', 'd', 'e'), range(5))}
d2 = {key:val for key, val in zip(('a', 'b', 'c', 'd', 'e'), range(4, 9))}

dicts = [d1, d2]

print dicts
#[{'a': 0, 'c': 2, 'b': 1, 'e': 4, 'd': 3}, {'a': 4, 'c': 6, 'b': 5, 'e': 8, 'd': 7}]

for i, d in enumerate(dicts):
    for k, v in d.items():
        if v == 4:
            del dicts[i][k]

print dicts
#[{'a': 0, 'c': 2, 'b': 1, 'd': 3}, {'c': 6, 'b': 5, 'e': 8, 'd': 7}]
print d1
#{'a': 0, 'b': 1, 'c': 2, 'd': 3}
print d2
#{'b': 5, 'c': 6, 'd': 7, 'e': 8}