我有一个JSON文件,当我试图删除python dict中的项目时,我从返回KeyError:0的API获取该文件。我认为这是我缺乏JSON技能和格式的综合结果。
我的目标是从ip\u地址\u 1
我的代码:
from api import Request
import requests, json, ordereddict
# prepare request
request = Request().service('').where({"query":"192.168.1.0"}).withType("json")
# call request
response = request.execute()
# parse response into python object
obj = json.loads(response)
# remove items
for i in xrange(len(obj)):
if obj[i]["ip_address_1"] == "192.168.1.1":
obj.pop(i)
# display
print json.dumps(obj,indent=1)
JSON示例:
{
"response": {
"alerts": [
{
"action": "New",
"ip_address_1": "192.168.1.1",
"domain": "example.com",
"ip_address_2": "192.68.1.2"
},
{
"action": "New",
"ip_address_1": "192.168.1.3",
"domain": "example2.com",
"ip_address_2": "192.168.1.1"
}
],
"total": "2",
"query": "192.168.1.0",
}
}
我把你的要求解释为:
ip\u地址\u 1
设置为192.168.1.1
ip\u地址\u 1
值的列表json.load(响应)
生成此字典:
{u'response': {u'alerts': [{u'action': u'New',
u'domain': u'example.com',
u'ip_address_1': u'192.168.1.1',
u'ip_address_2': u'192.68.1.2'},
{u'action': u'New',
u'domain': u'example2.com',
u'ip_address_1': u'192.168.1.3',
u'ip_address_2': u'192.168.1.1'}],
u'query': u'192.168.1.0',
u'total': u'2'}}
"警报"列表的访问方式是(假设判决绑定到obj
):
>>> obj['response']['alerts']
[{u'action': u'New',
u'domain': u'example.com',
u'ip_address_1': u'192.168.1.1',
u'ip_address_2': u'192.68.1.2'},
{u'action': u'New',
u'domain': u'example2.com',
u'ip_address_1': u'192.168.1.3',
u'ip_address_2': u'192.168.1.1'}]
第一部分可以这样做:
alerts = obj['response']['alerts']
obj['response']['alerts'] = [d for d in alerts if d.get('ip_address_1') != '192.168.1.1']
这里,使用列表理解来过滤那些具有ip\u地址\u 1
192.168.1.1的词典,然后将得到的列表返回到obj
词典中。在此之后,obj是:
>>> pprint(obj)
{u'response': {u'alerts': [{u'action': u'New',
u'domain': u'example2.com',
u'ip_address_1': u'192.168.1.3',
u'ip_address_2': u'192.168.1.1'}],
u'query': u'192.168.1.0',
u'total': u'2'}}
接下来,在删除不需要的DICT后,通过在警报列表上运行另一个列表理解,可以轻松创建其他ip地址的列表,如上所示:
ip_addresses = [d['ip_address_1'] for d in obj['response']['alerts'] if d.get('ip_address_1') is not None]
请注意,我们使用get()
来处理某些字典可能没有ip\u地址\u 1
键的可能性。
>>> ip_addresses
[u'192.168.1.3']
这是不正确的:
# remove items
for i in xrange(len(obj)):
if obj[i]["ip_address_1"] == "192.168.1.1":
obj.pop(i)
您正在迭代一个对象,就像它是一个列表一样。
你想做什么:
for sub_obj in obj["response"]["alerts"]:
if sub_obj["ip_address_1"] == "192.168.1.1":
sub_obj.pop("ip_address_1")
问题内容: 我要删除重复的项目,重复的项目可以撤消。结果应为: 如何在Python中实现? 问题答案: 如果订单很重要,您可以随时使用OrderedDict
问题内容: 我想从我的redux状态中删除一个元素。我使用无缝不可变及其API对状态进行操作。但是我找不到在嵌套状态时删除元素的任何好方法。 所以我要删除的元素是: 谢谢! 问题答案: 有时我也陷入了类似情况。 因此,根据redux docs ,更新嵌套对象的方式是:- 但是由于数组处于状态,这会使您的工作更加困难。 因此,有两种方法可以执行此操作。 第一种方式(困难的方式) 自己创建一个新对象并
问题内容: 我是诺言和使用NodeJS中的请求和诺言编写网络代码的新手。 我想删除这些嵌套的Promise,而是将它们链接起来,但是我不确定我将如何处理它/这是否是正确的方法。 这是请求代码: 任何见识将不胜感激。 问题答案: 在每个回调中,您都需要 返回 新的Promise: 调用返回的承诺然后将使用“内部”承诺中的值进行解析,以便您可以轻松地链接它们。 通用模式:
问题内容: 尝试删除以下 用户 创建的 node_modules 目录时: 源文件名大于文件系统支持的文件名。尝试移动到路径名较短的位置,或尝试重命名为较短的名称,然后再尝试执行此操作 我也尝试过+ ,但仍然遇到相同的问题。 问题答案: 由于这是Google的最佳搜索结果,因此这对我有用: 安装RimRaf: 在项目文件夹中,使用以下命令删除node_modules文件夹: 如果要递归删除: [
我不熟悉promise和使用NodeJS中的请求和promise编写网络代码。 我想删除这些嵌套的promise,并将它们链接起来,但我不确定该如何做/这是否是正确的方式。 这是请求代码: 如有任何见解,将不胜感激。
问题内容: 我是诺言和使用NodeJS中的请求和诺言编写网络代码的新手。 我想删除这些嵌套的Promise,而是将它们链接起来,但是我不确定我将如何处理它/这是否是正确的方法。 这是请求代码: 任何见识将不胜感激。 问题答案: 在每个回调中,您都需要 返回 新的Promise: 调用返回的承诺然后将使用“内部”承诺中的值进行解析,以便您可以轻松地链接它们。 通用模式: