Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.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_List_Python 3.x - Fatal编程技术网

如何从python列表中的多个字典中删除键

如何从python列表中的多个字典中删除键,python,list,python-3.x,Python,List,Python 3.x,我将以下示例数据作为python中的listobject [{'itemdef': 10541, 'description': 'Dota 2 Just For Fun tournament. ', 'tournament_url': 'https://binarybeast.com/xDOTA21404228/', 'leagueid': 1212, 'name': 'Dota 2 Just For Fun'}, {'itemdef': 10742,

我将以下示例数据作为python中的listobject

[{'itemdef': 10541,
    'description': 'Dota 2 Just For Fun tournament. ', 
    'tournament_url': 'https://binarybeast.com/xDOTA21404228/', 
    'leagueid': 1212, 
    'name': 'Dota 2 Just For Fun'}, 
{'itemdef': 10742, 
    'description': 'The global Dota 2 league for everyone.', 
    'tournament_url': 'http://www.joindota.com/en/leagues/', 
    'leagueid': 1640, 
    'name': 'joinDOTA League Season 3'}]
如何从该列表中删除描述、巡更url;或者我怎么能只保留名字和联盟密钥。我尝试过各种各样的解决方案,但似乎都不管用

第二个问题:如何筛选此列表?与mysql一样:

select *
from table
where leagueid = 1212

请把我当作python的新人,因为我真的是。

关于第一个问题:

for item in table:
    item.pop(tournament_url)
[item for item in table if item[leagueid] == 1212]
关于第二个问题:

for item in table:
    item.pop(tournament_url)
[item for item in table if item[leagueid] == 1212]

所以你有一个字典列表。要从字典中删除
锦标赛url
键,我们将使用字典理解

my_list = [{k:v for k, v in d.items() if k != 'tournament_url'} for d in my_list]

阅读有关理解的更多信息,请参见事实上
列表
没有键,
列表
有索引,
字典
有键。在您的情况下,您有一个字典列表,您需要的是从列表的每个项目(字典)中删除一些键(确切地说是:description和url):

for item in my_list:  # my_list if the list that you have in your question
    del item['description']
    del item['tournament_url']
要使用某些条件从上面的列表中检索项目,您可以执行以下操作:

[item for item in my_list if your_condition_here]
keys_to_keep = ['itemdef', 'name']

res = [{ key: item[key] for key in keys_to_keep } for item in my_list]
print(res)
# Output: [{'itemdef': 10541, 'name': 'Dota 2 Just For Fun'}, {'itemdef': 10742, 'name': 'joinDOTA League Season 3'}]
示例:

>>> [item for item in my_list if item['itemdef'] == 10541]
[{'leagueid': 1212, 'itemdef': 10541, 'name': 'Dota 2 Just For Fun'}]
编辑:

>>> [item for item in my_list if item['itemdef'] == 10541]
[{'leagueid': 1212, 'itemdef': 10541, 'name': 'Dota 2 Just For Fun'}]
要筛选
my_list
项以仅检索某些键,您可以执行以下操作:

[item for item in my_list if your_condition_here]
keys_to_keep = ['itemdef', 'name']

res = [{ key: item[key] for key in keys_to_keep } for item in my_list]
print(res)
# Output: [{'itemdef': 10541, 'name': 'Dota 2 Just For Fun'}, {'itemdef': 10742, 'name': 'joinDOTA League Season 3'}]

这将重新创建列表和所有词典。在列表中迭代删除不需要的键更容易、更快速。print[{key:value for key,value in d[x]。items()如果key!='tournament\u url'和key!='description'}用于范围内的x(len(d))],del和
item.pop
之间有区别吗?等等,我有一个字典列表?妈的,多谢了。我一直被困在这个狗屎里。@rassar
item.pop('key')
也会返回键的值,以便在我们需要读取和删除对象时使用。@rassar这回答了您的问题@ettanany是否有办法不将其从当前列表中删除,而是选择要保留的键,我有一个字典列表,其中包含数量可变的键
del item
在这里不起作用(或者如果你能把它颠倒过来的话。你能帮我一下吗?你能解释一下如何使用第二段代码吗?@Adam有三种等效的变体可以做到这一点: