我需要以最有效的方式从字典中删除一些项目,现在是RIght,我正在使用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}]
我只想删除字典中的工资项。 任何意见都表示赞赏。
答案 0 :(得分:6)
如果你的示例数据是你正在处理的,而不是删除元素,只需用那个单独的键重新创建你的dict
dicta = [{'Salary':e['Salary']} for e in dicta]
或者对我而言,更有意义的是,只创建一个列表而不是dicts列表
dicta = [e['Salary'] for e in dicta]
但取决于您计划实现的目标
答案 1 :(得分:5)
我想你可以使用:
for eachitem in dicta:
for k in ['NAME','STATE','COUNTRY','REGION','LNAME']:
del eachitem[k]
或者,如果您只想要1个键:
for eachitem in dicta:
salary = eachitem['SALARY']
eachitem.clear()
eachitem['SALARY'] = salary
这样可以确保您想要的所有内容 - 否则,您只需通过以下方式即可完成:
eachitem = {'SALARY':eachitem['SALARY']}
答案 2 :(得分:1)
%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