删除超出范围的字典键(python)

删除超出范围的字典键(python),python,loops,dictionary,Python,Loops,Dictionary,如果您有整数字典: d = { 1:[0], 2:[1], 3:[0,1,2,3,4], 4:[0], 5:[1], 6:[0,1,2,3,4], 11:[0], 22:[1], 33:[0,1,2,3,4], 44:[0], 55:[1], 66:[0,1,2,3,4] } 您想: 验证键是否介于0和25之间 删除任何超出范围的密钥,因为它们无效并将破坏数据集 字典键不是自然排序的 给定,如何验证您的密钥是否在所需范围内? 我的尝试:

如果您有整数字典:

d = {
  1:[0],
  2:[1], 
  3:[0,1,2,3,4],
  4:[0],
  5:[1], 
  6:[0,1,2,3,4],
  11:[0],
  22:[1], 
  33:[0,1,2,3,4],
  44:[0],
  55:[1], 
  66:[0,1,2,3,4]
}
您想:

  • 验证键是否介于0和25之间

  • 删除任何超出范围的密钥,因为它们无效并将破坏数据集

  • 字典键不是自然排序的

    给定,如何验证您的密钥是否在所需范围内? 我的尝试:

    for x,y in d.items(): 
        if x<0 or x>25: 
             del d[x]
    

    我该如何补偿呢

    在您的示例中,在循环过程中对
    d
    进行变异

    如果不需要更改原始的
    d
    ,最简单的方法是使用字典理解:

    d = { 1:[0], 2:[1], 3:[0,1,2,3,4], 4:[0], 5:[1], 6:[0,1,2,3,4], 11:[0], 22:[1], 33:[0,1,2,3,4], 44:[0], 55:[1], 66:[0,1,2,3,4] }
    new_d = {a:b for a, b in d.items() if a <= 25 and a >= 0}
    

    d={k:v代表k,v在d.items()中如果0您可以使用字典理解:

    d = { 1:[0], 2:[1], 3:[0,1,2,3,4], 4:[0], 5:[1], 6:[0,1,2,3,4], 11:[0], 22:[1], 33:[0,1,2,3,4], 44:[0], 55:[1], 66:[0,1,2,3,4] }
    new_d = {a:b for a, b in d.items() if a <= 25 and a >= 0}
    

    如果要在迭代时删除键,则需要在副本上迭代,并弹出不符合条件的键:

    d = {1:[0], 2:[1], 3:[0,1,2,3,4], 4:[0], 5:[1], 6:[0,1,2,3,4], 11:[0], 22:[1], 33:[0,1,2,3,4], 44:[0], 55:[1], 66:[0,1,2,3,4]}
    
    for k in d.copy(): # or list(d)
        if not 0 <= k <= 25:
            d.pop(k) # or del d[k]
    
    正如其他人所展示的,重建一本新词典总是一个简单的方法

    您可以在此处使用基本的听写理解:

    {k: d[k] for k in d if 0 <= k <= 25}
    

    你是说d.items()?@TheClonerx是的,我刚刚意识到:P
    d = {1:[0], 2:[1], 3:[0,1,2,3,4], 4:[0], 5:[1], 6:[0,1,2,3,4], 11:[0], 22:[1], 33:[0,1,2,3,4], 44:[0], 55:[1], 66:[0,1,2,3,4]}
    
    for k in d.copy(): # or list(d)
        if not 0 <= k <= 25:
            d.pop(k) # or del d[k]
    
    {1: [0], 2: [1], 3: [0, 1, 2, 3, 4], 4: [0], 5: [1], 6: [0, 1, 2, 3, 4], 11: [0], 22: [1]}
    
    {k: d[k] for k in d if 0 <= k <= 25}
    
    dict(filter(lambda x: 0 <= x[0] <= 25, d.items()))