键和列表的字典-如果列表中没有任何值,则删除键

时间:2018-06-20 04:23:19

标签: python

我有以下格式的字典

mydict = 

{ a: [1, 2],
  b: [2, 2],
  c: [1, 0],
  d: [1, 1]
}

如果任何值为None

{ a: [1, None],
  b: [2, 2],
  c: [1, 0],
  d: [1, 1]
}

我要删除那对key:value

输出应为

    {
      b: [2, 2],
      c: [1, 0],
      d: [1, 1]
    }

我正在像这样打印它,

for key, values in mydict.items():
    print key, values
    .
    .
    .

我想删除None而不在我的for循环内开始新的循环,所以我尝试了这个,

我尝试过

for key, values in mydict.items() if values.items is not None:

但是它不断给我带来无效的语法错误,

SyntaxError: invalid syntax

5 个答案:

答案 0 :(得分:3)

使用字典理解:

d = { 'a': [1, None],
      'b': [2, 2],
      'c': [1, 0],
      'd': [1, 1] }

print({k:v for k, v in d.items() if None not in v})
# {'b': [2, 2], 'c': [1, 0], 'd': [1, 1]}

如果您需要像您这样的循环:

for key, value in d.items():
    if None not in value:
        print(key, value)
        # do your calculations here

答案 1 :(得分:2)

您可以尝试

mydict = { 'a': [1, None],
      'b': [2, 2],
      'c': [1, 0],
      'd': [1, 1]
    }

from copy import copy

newdict = copy(mydict)

for key, values in mydict.items():
    if None in values:
      newdict.pop(key)

print newdict

答案 2 :(得分:2)

更改

for key, values in mydict.items():  
    print key, values

进入

for key, values in mydict.items():  
    if (None not in values):  
        print key, values

答案 3 :(得分:1)

尝试使用filter + lambda

d=dict(filter(lambda x: None not in x[1], list(d.items())))
print(d)

或带有for循环:

newd = {}
for k,v in d.items():
   if not None in v:
      newd.update({k:v})

答案 4 :(得分:0)

使用> ex.list <- list() > ex.list[[1]] <- integer(0) > ex.list[[2]] <- c(1,2,3) > ex.list [[1]] integer(0) [[2]] [1] 1 2 3 > unlist(ex.list) [1] 1 2 3

dictionary comprehension

输出:

your_dict = {key:value for key,value in my_dict.items() if None not in value}