Python 字典:pop 或 del
Python dictionary: pop or del
我无法理解 python 字典
假设我有一个名为 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"}
]}
我想删除 apple2,所以我的最终结果如下所示:
{ "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"}
]}
我怀疑我必须做这样的事情:
for item in data['computers']:
if "apple2" in item['Netbios_Name0']:
item.pop() # or del data[item]
但我无法让它工作。
您可以使用 remove()
:
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
输出:
{'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'}]}
您正在迭代列表 - 您可以按索引从列表中弹出。
永远不要在迭代时修改列表长度:How to remove items from a list while iterating?
一种方法是存储要删除的索引并在以后删除它们:
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)
输出:
{'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'}]
}
Python 的 built-in 枚举函数允许我们遍历列表并检索列表中每个项目的索引和值:
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/
我无法理解 python 字典
假设我有一个名为 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"}
]}
我想删除 apple2,所以我的最终结果如下所示:
{ "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"}
]}
我怀疑我必须做这样的事情:
for item in data['computers']:
if "apple2" in item['Netbios_Name0']:
item.pop() # or del data[item]
但我无法让它工作。
您可以使用 remove()
:
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
输出:
{'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'}]}
您正在迭代列表 - 您可以按索引从列表中弹出。
永远不要在迭代时修改列表长度:How to remove items from a list while iterating?
一种方法是存储要删除的索引并在以后删除它们:
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)
输出:
{'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'}]
}
Python 的 built-in 枚举函数允许我们遍历列表并检索列表中每个项目的索引和值:
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/