首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python字典: pop还是del

Python字典: pop还是del
EN

Stack Overflow用户
提问于 2022-04-27 11:37:59
回答 3查看 83关注 0票数 -1

我很难理解python的二叉树

假设我有一个名为data的二数值,如下所示:

代码语言:javascript
复制
{ "computers": [
    {"Netbios_Name0": "apple1", "User_Domain0": "paradise", "User_Name0": "adam", "SMS_Installed_Sites0": "heaven", "Client_Version0": "5.00.9058.1018"}, 
    {"Netbios_Name0": "apple2", "User_Domain0": "paradise", "User_Name0": "lilith", "SMS_Installed_Sites0": "heaven", "Client_Version0": "5.00.9040.1044"}, 
    {"Netbios_Name0": "apple3", "User_Domain0": "paradise", "User_Name0": "eve", "SMS_Installed_Sites0": "heaven", "Client_Version0": "5.00.9068.1026"}
]}

我想删除apple2,所以我的最终结果如下所示:

代码语言:javascript
复制
{ "computers": [
    {"Netbios_Name0": "apple1", "User_Domain0": "paradise", "User_Name0": "adam", "SMS_Installed_Sites0": "heaven", "Client_Version0": "5.00.9058.1018"},  
    {"Netbios_Name0": "apple3", "User_Domain0": "paradise", "User_Name0": "eve", "SMS_Installed_Sites0": "heaven", "Client_Version0": "5.00.9068.1026"}
]}

我想我得做这样的事:

代码语言:javascript
复制
for item in data['computers']:
    if "apple2" in item['Netbios_Name0']:
        item.pop() # or del data[item]

但我不能让它起作用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-27 11:44:05

您可以使用remove()

代码语言:javascript
复制
data = { "computers": [
    {"Netbios_Name0": "apple1", "User_Domain0": "paradise", "User_Name0": "adam", "SMS_Installed_Sites0": "heaven", "Client_Version0": "5.00.9058.1018"}, 
    {"Netbios_Name0": "apple2", "User_Domain0": "paradise", "User_Name0": "lilith", "SMS_Installed_Sites0": "heaven", "Client_Version0": "5.00.9040.1044"}, 
    {"Netbios_Name0": "apple3", "User_Domain0": "paradise", "User_Name0": "eve", "SMS_Installed_Sites0": "heaven", "Client_Version0": "5.00.9068.1026"}
]}

for item in list(data['computers']):
    if 'apple2' in item['Netbios_Name0']:
        data['computers'].remove(item)
data

输出:

代码语言:javascript
复制
{'computers': [{'Netbios_Name0': 'apple1',
   'User_Domain0': 'paradise',
   'User_Name0': 'adam',
   'SMS_Installed_Sites0': 'heaven',
   'Client_Version0': '5.00.9058.1018'},
  {'Netbios_Name0': 'apple3',
   'User_Domain0': 'paradise',
   'User_Name0': 'eve',
   'SMS_Installed_Sites0': 'heaven',
   'Client_Version0': '5.00.9068.1026'}]}
票数 3
EN

Stack Overflow用户

发布于 2022-04-27 11:46:14

您正在迭代一个列表--您可以按索引从列表中弹出。

迭代时不要修改列表长度:How to remove items from a list while iterating?

一种方法是存储要删除的索引,然后删除它们:

代码语言:javascript
复制
data = { "computers": [
    {"Netbios_Name0": "apple1", "User_Domain0": "paradise", "User_Name0": "adam", 
     "SMS_Installed_Sites0": "heaven", "Client_Version0": "5.00.9058.1018"}, 
    {"Netbios_Name0": "apple2", "User_Domain0": "paradise", "User_Name0": "lilith", 
     "SMS_Installed_Sites0": "heaven", "Client_Version0": "5.00.9040.1044"}, 
    {"Netbios_Name0": "apple3", "User_Domain0": "paradise", "User_Name0": "eve", 
     "SMS_Installed_Sites0": "heaven", "Client_Version0": "5.00.9068.1026"}
]}

to_delete = []
for idx, inner_dic in enumerate(data['computers']):
    if "apple2" in inner_dic['Netbios_Name0']:
        to_delete.append(idx)
# remove biggest to lowest indexes - removing does not influence the order 
for idx in to_delete[::-1]:
    data['computers'].pop(idx)

print(data)

输出:

代码语言:javascript
复制
{'computers': 
    [{'Netbios_Name0': 'apple1', 'User_Domain0': 'paradise', 'User_Name0': 'adam', 
      'SMS_Installed_Sites0': 'heaven', 'Client_Version0': '5.00.9058.1018'}, 
     {'Netbios_Name0': 'apple3', 'User_Domain0': 'paradise', 'User_Name0': 'eve', 
      'SMS_Installed_Sites0': 'heaven', 'Client_Version0': '5.00.9068.1026'}]
}
票数 1
EN

Stack Overflow用户

发布于 2022-04-27 11:52:47

Python的内置枚举函数允许我们循环列表并检索列表中每个项的索引和值:

代码语言:javascript
复制
data = { "computers": [
    {"Netbios_Name0": "apple1", "User_Domain0": "paradise", "User_Name0": "adam", "SMS_Installed_Sites0": "heaven", "Client_Version0": "5.00.9058.1018"}, 
    {"Netbios_Name0": "apple2", "User_Domain0": "paradise", "User_Name0": "lilith", "SMS_Installed_Sites0": "heaven", "Client_Version0": "5.00.9040.1044"}, 
    {"Netbios_Name0": "apple3", "User_Domain0": "paradise", "User_Name0": "eve", "SMS_Installed_Sites0": "heaven", "Client_Version0": "5.00.9068.1026"}
]}

# Here 0 in 2nd argument is the starting number for num variable, can be used 0 to indicate as index
for num, computer in enumerate(data["computers"], 0):
    if computer["Netbios_Name0"] == "apple2":
        del data["computers"][num]

print(data)

这应该能行。

您可以在这里找到更多信息:https://realpython.com/iterate-through-dictionary-python/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72028048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档