从python字典列表中获取2个键值并创建新的列表/元组/数组/字典,每个索引包含第一个列出的dict中的2个键值

时间:2019-06-22 18:23:48

标签: python arrays dictionary tuples

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

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

我的问题是:

如何将这两个新键:值对放在一个新的列表/字典/数组/元组中,代表两个键:为原始列表中每个列出的元素提取的值对?

要清楚:

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}]

1 个答案:

答案 0 :(得分:0)

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

下面是当前代码:

BEFORE CHANGES:
<html>
 <head></head>
 <body>
  <div>
   b a b 
   <span>b c</span> d b
  </div> 
 </body>
</html>

AFTER CHANGES
<html>
 <head></head>
 <body>
  <div>
   <span class="x">b</span> a 
   <span class="x">b</span> 
   <span>b c</span> d 
   <span class="x">b</span>
  </div> 
 </body>
</html>

此外,如果有任何更优雅的解决方案,任何人都可以想到,我真的会对学习它们感兴趣……我正在查看的一些json文件的范围可以从原始列表中的200个字典条目到2,000,000个不等。我打算将解析的结果馈送到消息队列中,以供其他服务处理,代码中的任何效率都将有助于处理的可伸缩性。另外,如果有人对Redis vs. RabbitMQ有任何建议,我将非常感谢