Python 3.x 仅从字典字典中获取空的子字典值
我研究这个问题已经有一段时间了,似乎无论我使用什么解决方案,我都得到了错误的答案 我有一本字典,例如Python 3.x 仅从字典字典中获取空的子字典值,python-3.x,Python 3.x,我研究这个问题已经有一段时间了,似乎无论我使用什么解决方案,我都得到了错误的答案 我有一本字典,例如 dict = {'a': {'name': 'Sam', 'likes': 'Cookies'}, 'b': {'name': 'Margaret', 'likes': None}, 'c': {'name': None, 'likes': None}} 我需要的是 {'b': {'likes': None}, 'c': {'name': None, 'lik
dict = {'a': {'name': 'Sam', 'likes': 'Cookies'},
'b': {'name': 'Margaret', 'likes': None},
'c': {'name': None, 'likes': None}}
我需要的是
{'b': {'likes': None},
'c': {'name': None, 'likes': None}}
我试着用理解来保持它尽可能的通灵
>>>{subd:{key:value for key,value in dict[subd].items() if not value} for subd in dict}
{'a': {},
'b': {'likes': None},
'c': {'name': None, 'likes': None}}
我知道我在输出中得到“a”,因为我在迭代每个子字典,它的参数中有所有值,因此结果是空的{},如果子字典没有空值,我如何确保跳过子字典?一些备注:
- 请避免使用内置名称,例如
。这些通常会导致破坏代码dict
- 词典理解,只有在目的明确的情况下才是通灵的。使用嵌套字典理解,通常不会比两行分开的内容更容易阅读
data = {'a': {'name': 'Sam', 'likes': 'Cookies'},
'b': {'name': 'Margaret', 'likes': None},
'c': {'name': None, 'likes': None}}
def get_none(dictionary):
result = {}
for key, value in dictionary.items():
result[key] = {k: v for k, v in value.items() if v is None}
return {k: v for k, v in result.items() if v}
if __name__ == '__main__':
print(get_none(data))
导致:
{'b': {'likes': None}, 'c': {'name': None, 'likes': None}}
编辑
我换了房间
dictionary = dictionary.copy()
一个名为result
的新字典的行。通过这样做,我不会复制任何不必要的大型词典。您可以使用以下代码:
dict = {'a':{'name': 'Sam', 'likes': 'Cookies'}, 'b':{'name': 'Margaret', 'likes': None}, 'c':{'name': None, 'likes': None}}
dic = {}
for elem in dict.keys():
dict_n = dict[elem]
di = {k: v for k, v in dict_n.items() if v is None}
res = {elem:di}
if di != {}:
dic.__setitem__(elem,di)
print(dic)
输出:
{'b': {'likes': None}, 'c': {'name': None, 'likes': None}}
setitem方法向dict添加键值对除了返回新的dict外,请不要修改给定的dict。这通常会导致破坏代码:-PI在构建解决方案时考虑过它,我应该提到,当然我忘记了。。。谢谢你的帮助。我通过创建本地副本来编辑代码,这样原始词典就不会被修改。
{k: nones
for k, d in dct.items()
if (nones := {k: v for k, v in d.items() if v is None})}