Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python字典中删除元素_Python - Fatal编程技术网

从python字典中删除元素

从python字典中删除元素,python,Python,我需要最有效的方法来删除字典中的一些条目,现在,我正在使用下面给出的stmt。我认为同样的事情应该在几行中完成 for eachitem in dicta: del eachitem['NAME'] del eachitem['STATE'] del eachitem['COUNTRY'] del eachitem['REGION'] d

我需要最有效的方法来删除字典中的一些条目,现在,我正在使用下面给出的stmt。我认为同样的事情应该在几行中完成

for eachitem in dicta:
                del eachitem['NAME']
                del eachitem['STATE']
                del eachitem['COUNTRY']
                del eachitem['REGION']
                del eachitem['LNAME']

dicta = [{'name','Bob','STATE':'VA','COUNTRY':'US','REGION':'MIDWEST','LNAME':'Brian',Salary:6000}]
我只希望字典中的工资项目一旦被删除。
非常感谢您的任何意见。

我想您可以使用:

for eachitem in dicta:
    for k in ['NAME','STATE','COUNTRY','REGION','LNAME']:
        del eachitem[k]
或者,如果您只需要一个键:

for eachitem in dicta:
    salary = eachitem['SALARY']
    eachitem.clear()
    eachitem['SALARY'] = salary
我认为这可以实现您想要的所有功能,否则,您可以通过以下方式实现:

eachitem = {'SALARY':eachitem['SALARY']}

如果您要处理的是示例数据,则不要删除元素,只需使用该单键重新创建dict即可

dicta = [{'Salary':e['Salary']} for e in dicta]
或者对我来说,创建一个列表而不是一个目录更有意义

dicta = [e['Salary'] for e in dicta]

但这取决于你计划实现什么编辑:我说过听写理解最快:我错了。我不小心运行了
%timeit test3
,而不是
%timeit test3()
。见下面的结果

def test1():
    dicta = [{'NAME':'Bob','STATE':'VA','COUNTRY':'US','REGION':'MIDWEST','LNAME':'Brian','Salary':6000}]
    remove = ['NAME','STATE','COUNTRY','REGION','LNAME']
    for d in dicta:
        for r in remove:
            d.pop(r)

def test2():
    dicta = [{'NAME':'Bob','STATE':'VA','COUNTRY':'US','REGION':'MIDWEST','LNAME':'Brian','Salary':6000}]
    remove = ['NAME','STATE','COUNTRY','REGION','LNAME']
    for d in dicta:
        for r in remove:
            del d[r]

def test3():
    dicta = [{'NAME':'Bob','STATE':'VA','COUNTRY':'US','REGION':'MIDWEST','LNAME':'Brian','Salary':6000}]
    remove = ['NAME','STATE','COUNTRY','REGION','LNAME']    
    dicta = [{k:v for k,v in d.iteritems() if k not in remove } for d in dicta]

# this is really what OP was looking for, the other 3 tests are more generalized.    
def test4():    
    dicta = [{'NAME':'Bob','STATE':'VA','COUNTRY':'US','REGION':'MIDWEST','LNAME':'Brian','Salary':6000}]
    remove = ['NAME','STATE','COUNTRY','REGION','LNAME']    
    dicta = [e['Salary'] for e in dicta]

%timeit test1()
# 100000 loops, best of 3: 2.32 us per loop    
%timeit test2()
# 1000000 loops, best of 3: 1.68 us per loop    
%timeit test3()
# 100000 loops, best of 3: 3.23 us per loop
%timeit test4()
# 1000000 loops, best of 3: 1.46 us per loop

关于您的数据结构,您能给我们提供更多的想法吗?您是只想要字典中的薪资项目,还是只想要薪资?只需选择这一点,它就变得简单多了。我没有给出字典中的全部项目,它总共有20个元素,我只需要删除5个元素…#Mgilson方法对我来说是完美的..谢谢,这样的东西的效率基本上可以忽略不计。可读性通常是最好的方法。确认:这是最快的方法,因此张贴。请看我的帖子。是的,当我发布时,没有声明OP只想在dict中保留一个键/值对。我已经使用
dict.clear
更新了解决方案。。。不知道它是如何比较的。哦,好吧,如果他只想从dict中得到一个条目,那么很明显,只得到一个条目要比删除所有其他条目快得多。+1:忍不住投票,顺便说一句,有趣的发现是
d.pop
del
慢,可能是因为函数调用过多。我把对timeit的调用搞砸了,显然,条件dict理解并不比仅仅使用
del
更快。这给了我一个无效的语法错误dicta=[{k:v代表k,v代表d.iteritems()(如果k不在remove}代表d代表dicta],只有python 2.7+支持dict理解语法。试试这个:
dicta=[dict((k,v)代表k,v在d中。iteritems()如果k不在remove中)代表d在dicta中]