Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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 如何仅从字典/json中提取特定字段?_Python_Json - Fatal编程技术网

Python 如何仅从字典/json中提取特定字段?

Python 如何仅从字典/json中提取特定字段?,python,json,Python,Json,我正在尝试创建一个新的字典,只提取特定的字段,我只想要“process\u hash”、“process\u name”、“process\u effective\u reputation”字段 下面的代码可以工作,但它只提取第一项,我想提取所有项,但只提取“进程\u哈希”、“进程\u名称”、“进程\u有效\u声誉”字段 JSON: 代码: 更新: 感谢Lauren Boland提供的代码,这很有效,Nattelar提供了解释 我已经附加了新代码,我正在尝试将进程散列字段拆分为两个字段,因此它是

我正在尝试创建一个新的字典,只提取特定的字段,我只想要“process\u hash”、“process\u name”、“process\u effective\u reputation”字段

下面的代码可以工作,但它只提取第一项,我想提取所有项,但只提取“进程\u哈希”、“进程\u名称”、“进程\u有效\u声誉”字段

JSON:

代码:

更新:

感谢Lauren Boland提供的代码,这很有效,Nattelar提供了解释


我已经附加了新代码,我正在尝试将进程散列字段拆分为两个字段,因此它是“md5”“sha256”“进程名称”“进程有效声誉”,我已经尝试了上面的代码,但我得到了 行={'md5':数据['process_hash'][0],'sha256':数据['process_hash'][1]} 索引器:列表索引超出范围


谢谢

您在for循环的每次迭代中都会覆盖
选定的\u字段
字典

试着把它列成一个清单。它将返回一个字典列表

selected_fields = []
for d in r:
    selected_fields.append({k: d[k] for k in ("process_hash", "process_name", "process_effective_reputation")})
return selected_fields

尽管已经有了答案,我想指出这里发生了什么

当您试图使一个变量等于某个值时,最终将覆盖以前存在的值,这就是代码无法工作的原因。但是,即使您尝试使用选定的_fields.update(),它也无法工作,因为键名称相同,现在键的值将被覆盖


在执行此类操作时,您通常必须保持结构的原始类型,即在选定的_字段的情况下,['Results']是一个列表

我已附加了新代码,我正在尝试将进程散列字段拆分为两个字段,因此它是“md5”“sha256”“进程名称”“进程有效的_声誉”,我尝试了上面的代码,但我得到了row={'md5':data['process\u hash'][0],'sha256':data['process\u hash'][1]}索引器:列表索引超出范围
response = json.loads(r.text)
r = response['results']

selected_fields = []
for d in r:
    selected_fields.append({k: d[k] for k in ("process_hash", "process_name", "process_effective_reputation")})

new_data = []
for data in selected_fields:
    fieldnames = 'md5 sha256 process_name process_effective_reputation'.split()
    row = {'md5': data['process_hash'][0], 'sha256': data['process_hash'][1]}
    # Copy process_name and process_effective_reputation fields.
    row.update({fieldname: data[fieldname] for fieldname in fieldnames[-2:]})
    new_data.append(row)
return new_data
selected_fields = []
for d in r:
    selected_fields.append({k: d[k] for k in ("process_hash", "process_name", "process_effective_reputation")})
return selected_fields