Возьмите 2 ключевых значения из списка python dicts и создайте новый список / кортеж / массив / словарь с каждым индексом, содержащим 2 ключевых значения из первого перечисленного dict - PullRequest
0 голосов
/ 22 июня 2019

У меня есть список словарей в файле json.

Я перебрал список и каждый словарь, чтобы получить две конкретные пары ключ: значение из каждого словаря для каждого элемента.т.е. 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 голосов
/ 22 июня 2019

Итак, у меня есть ответ на получение ключей в отдельных словарях, как показано в приведенном ниже коде. Единственная проблема заключается в том, что значение «key_2» в исходных словарях json является либо значением int, либо «» для значений, которые равны 0. Мой сценарий просто возвращает «None» для всех экземпляров value_2 для key_2. Как я могу заставить его читать соответствующие значения для '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 vs. RabbitMQ, я бы очень признателен за это

...