【问题标题】:Take 2 key values from list of python dicts & make new list/tuple/array/dictionary with each index containing 2 key values from 1st listed dict从 python dicts 列表中获取 2 个键值并创建新的列表/元组/数组/字典,每个索引包含来自第一个列出的 dict 的 2 个键值
【发布时间】:2019-06-22 18:23:48
【问题描述】:

我有一个 json 文件中的字典列表。

我已经遍历列表和每个字典,以从每个字典中为每个元素获取两个特定的键:值对。 即List[dictionary{i(key_x:value_x, key_y:value_y)}]

我现在的问题是:

如何将这两个新的key:value对放置在一个新的list/dictionary/array/tuple中,代表两个key:value对为原始中的每个列出的元素提取?

要明确:

ORIGINAL_LIST      (i.e. with each element being a nested dictionary) = 
[{"a":{"blah":"blah",
      "key_1":value_a1,
      "key_2":value_a2,
      "key_3":value_a3,
      "key_4":value_a4,
      "key_5":value_a5,},
  "b":"something_a"},
 {"a":{"blah":"blah",
      "key_1":value_b1,
      "key_2":value_b2,
      "key_3":value_b3,
      "key_4":value_b4,
      "key_5":value_b5,},
  "b":"something_b"}]

所以到目前为止我的代码是:

    import json
    from collections import *
    from pprint import pprint

    json_file = "/some/path/to/json/file"

    with open(json_file) as json_data:
        data = json.load(json_data)
    json_data.close()

    for i in data:
        event = dict(i)
        event_key_b = event.get('b')
        event_key_2 = event.get('key_2')
        print(event_key_b)#print value of "b" for each nested dict for 'i'
        print(event_key_2)#print value of "key_2" for each nested dict for 'i'

要明确:

FINAL_LIST(i.e. with each element being a nested dictionary) = 

    [{"b":"something_a", "key_2":value_2},
     {"b":"something_b", "key_2":value_2}]

【问题讨论】:

  • 你能澄清一下你的FINAL_LIST,为什么只有key_2在场?
  • 由于某种原因堆栈删去了字典的第二部分,它应该有另一个嵌套字典 {"b":"something_b", {"key_2":value_2}}]
  • 最终列表应该是:[{"b":"something_a", {"key_2":value_2}}, {"b":"something_b", {"key_2":value_2}}]
  • 将其添加到问题中
  • 我想我理解你的困惑,我用于最终列表的嵌套字典没有意义,我在问题中对其进行了编辑以反映这一点,谢谢

标签: python arrays dictionary tuples


【解决方案1】:

所以我有一个答案,可以将键放入单个字典中,如下面的代码所示。唯一的问题是原始 json 字典中“key_2”的值要么是 int 值,要么是 0 值的“”。我的脚本只为 key_2 的 value_2 的所有实例返回“None”。如何让它读取“value_2”的适当值?我只想返回 'value_2' > 0 的字典(即 value_2 != "")

下面是当前代码:

import json
from pprint import pprint

json_file = "/some/path/to/json/file"

with open(json_file) as json_data:
    data = json.load(json_data)
json_data.close()

for i in data:
    event_key_b = event.get('b')
    for x in i:
        event_key_2 = event.get('key_2')
        x = {'b' : something_b, 'key_2' : value_2}
    print(x)

此外,如果有任何人能想到的更优雅的解决方案,我真的有兴趣学习它们......我正在查看的一些 json 文件的范围从原始列表中的 200 个字典条目到 2,000,000 个不等。我计划将我的解析结果输入到消息队列中,以便由不同的服务处理,代码中的任何效率都将有助于处理的可扩展性。另外,如果有人对 Redis 与 RabbitMQ 有任何建议,我将不胜感激

【讨论】:

    猜你喜欢
    • 2021-02-08
    • 2021-07-12
    • 2021-12-25
    • 1970-01-01
    • 2019-03-17
    • 2022-09-23
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多