代码之家  ›  专栏  ›  技术社区  ›  igorgue

如何删除字典列表中特定键的所有项目?

  •  0
  • igorgue  · 技术社区  · 16 年前

    d1 = {'a': 1, 'b': 2}
    d2 = {'a': 1}
    
    l = [d1, d2, d1, d2, d1, d2]
    
    for i in range(len(l)):
        if l[i].has_key('b'):
            del l[i]['b']
    
    print l
    

    [{'a': 1}, {'a': 1}, {'a': 1}, {'a': 1}, {'a': 1}, {'a': 1}]
    

    4 回复  |  直到 14 年前
        1
  •  16
  •   Danra Bathsheba    16 年前
    d1 = {'a': 1, 'b': 2}
    d2 = {'a': 1}
    l = [d1, d2, d1, d2, d1, d2]
    for d in l:
        d.pop('b',None)
    print l
    
        2
  •  3
  •   Kathy Van Stone    16 年前

    稍微简化一下:

       for d in l:
          if d.has_key('b'):
             del d['b']
    

    有些人也可能这样做

       for d in l:
          try:
             del d['b']
          except KeyError:
             pass
    

    在Python中捕获这样的异常并不像在其他语言中那样昂贵。

        3
  •  2
  •   Lennart Regebro    16 年前

    [x.pop('b',无)表示l中的x]

    不过请注意,只有一个“b”会被删除,因为你的列表l引用了字典。所以运行上面的代码,然后打印出d1,你会注意到事实上你也从d1中删除了b键。

    为了避免这种情况,您需要复制字典:

    d1 = {'a': 1, 'b': 2}
    d2 = {'a': 1}
    
    l = [d1.copy(), d2.copy(), d1.copy(), d2.copy(), d1.copy(), d2.copy()]
    [b.pop('b', None) for b in l]
    

    d1现在将保留b键。

        4
  •  0
  •   Nikokrock    16 年前

    d2={‘a':1}

    l=[d1、d2、d1、d2,d1、d2]

    对于范围内的i(len(l)): 如果l[i].has_key('b'): del l[i]['b']

    打印l

    以下是对代码的简要回顾:

    1. 在列表上迭代与C不同。如果你不需要引用列表索引,最好在l中使用for item,然后用item替换l[i]。
    2. 对于密钥存在性测试,你可以在l[i]中写if'b'

    for item in l:
        if 'b' in item:
            del item['b']