基于python中嵌套字典中的键删除项目
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于python中嵌套字典中的键删除项目相关的知识,希望对你有一定的参考价值。
我有一个字典看起来像这样:
{
'key1':
{
'a': 'key1',
'b': 'val1',
'c': 'val2'
},
'key2':
{
'a': 'key2',
'b': 'val3',
'c': 'val4'
},
'key3':
{
'a': 'key3',
'b': 'val5',
'c': 'val6'
}
}
我试图基于键“a”删除嵌套字典中的元素以获得如下输出:
{
'key1':
{
'b': 'val1',
'c': 'val2'
},
'key2':
{
'b': 'val3',
'c': 'val4'
},
'key3':
{
'b': 'val5',
'c': 'val6'
}
}
我为它编写了以下代码段:
for k in dict_to_be_deleted:
del k["a"]
我一直得到关键错误:找不到k。我也尝试了以下方法:
for i in dict_to_be_deleted:
for k,v in i.items():
if "a" in k:
del i[k]
我明白了
Attribute Error: str object has no attribute items
但是,因为dict_to_be_deleted
是一个嵌套字典,所以它不是一本字典吗?我很困惑。我非常感谢这方面的任何指示。
当您在字典上进行迭代时,dict_to_be_deleted
只会迭代键。所以在你的第二次尝试中,你的Attribute Error
是因为i
是关键字,字符串不是字典。如何实际执行它将是使用.values()
迭代值而不是。
for v in dict_to_be_deleted.values():
del v["a"]
但是,就个人而言,我建议不要删除元素,而是建议遵循Ajax的方法并构建一个没有缺少元素的新字典。像我们在这里做的奇怪的突变是一个容易的方法来获取错误。
在这种情况下,最好过滤字典的内容:
d = {
'key1':
{
'a': 'key1',
'b': 'val1',
'c': 'val2'
},
'key2':
{
'a': 'key2',
'b': 'val3',
'c': 'val4'
},
'key3':
{
'a': 'key3',
'b': 'val5',
'c': 'val6'
}
}
new_d = {a:{c:d for c, d in b.items() if c != 'a'} for a, b in d.items()}
输出:
{'key3': {'c': 'val6', 'b': 'val5'}, 'key2': {'c': 'val4', 'b': 'val3'}, 'key1': {'c': 'val2', 'b': 'val1'}}
一个简单的方法是使用dict.pop()
代替:
data = {
'key1':
{
'a': 'key1',
'b': 'val1',
'c': 'val2'
},
'key2':
{
'a': 'key2',
'b': 'val3',
'c': 'val4'
},
'key3':
{
'a': 'key3',
'b': 'val5',
'c': 'val6'
}
}
for key in data:
data[key].pop('a', None)
print(data)
哪些输出:
{'key1': {'b': 'val1', 'c': 'val2'}, 'key2': {'b': 'val3', 'c': 'val4'}, 'key3': {'b': 'val5', 'c': 'val6'}}
dict.pop()
的工作方式是首先检查密钥是否在字典中,在这种情况下是"a"
,它将删除它并返回其值。否则,返回一个默认值,在本例中为None
,它可以防止KeyError
。
你可以简单地使用两个字典的功能与列表理解pop()&itervalues()
[value.pop('a',None)表示d.itervalues()中的值
打印d
output> {'key3':{'c':'val6','b':'val5'},'key2':{'c':'val4','b':'val3'},'key1' :{'c':'val2','b':'val1'}}
好处:它不占用额外的内存。因为我们不是在这里创造新的词典
如果你正在寻找简洁@ Ajax1234答案更具描述性
当您可以提取所需内容时,为什么要删除?这是collections.defaultdict(dict)方法:
data={
'key1':
{
'a': 'key1',
'b': 'val1',
'c': 'val2'
},
'key2':
{
'a': 'key2',
'b': 'val3',
'c': 'val4'
},
'key3':
{
'a': 'key3',
'b': 'val5',
'c': 'val6'
}
}
import collections
dict_1=collections.defaultdict(dict)
for key,value in data.items():
for key_1,value_1 in value.items():
if key!='a':
dict_1[key][key_1]=value_1
print(dict_1)
输出:
{
"key1": {
"b": "val1",
"c": "val2"
},
"key2": {
"b": "val3",
"c": "val4"
},
"key3": {
"b": "val5",
"c": "val6"
}
}
以上是关于基于python中嵌套字典中的键删除项目的主要内容,如果未能解决你的问题,请参考以下文章