Внутри списка dicts обработка всех пар ключ-значение за одну итерацию

Не устаревший способ сделать это (используя .NET 4.0 в качестве предыдущих плакатов):

using System.CodeDom.Compiler;
using System.Reflection;
using System;
public class J
{
    public static void Main()
    {       
        System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
        parameters.GenerateExecutable = false;
        parameters.OutputAssembly = "AutoGen.dll";

        CompilerResults r = CodeDomProvider.CreateProvider("CSharp").CompileAssemblyFromSource(parameters, "public class B {public static int k=7;}");

        //verify generation
        Console.WriteLine(Assembly.LoadFrom("AutoGen.dll").GetType("B").GetField("k").GetValue(null));
    }
}
0
задан sergei_22 26 June 2019 в 23:07
поделиться

3 ответа

    result_list = []
    for d in data:
        result_list.append([v for k,v in d.items()])

Это создает список списков. Обратите внимание, что когда вы делаете это, вы выбрасываете ключи в своих словарях. Это, вероятно, не то, что вы хотите.

    for k, v in enumerate(result_list.items()): 
        # process each key-value pair

Вы получаете здесь ошибку, потому что result_list это список, а не словарь. Списки не имеют метода с именем items().

Вместо этого я предлагаю вам выполнить итерации по data напрямую. Нет необходимости в result_list:

for d in data:
    for k, v in d.items():
        # process each key-value pair
0
ответ дан Code-Apprentice 26 June 2019 в 23:07
поделиться

Первая часть Вашей проблемы находится в Вашем перечисляла вызов:

    for k, v in enumerate(result_list): # take off the .items())
        # process each key-value pair

Вы не вызываете .items () на result_list; перечислите использует его как список.

Ответ на вторую из Ваших проблем:

import json

with open("file.json", "r") as read_file:
data = json.load(read_file)

for i in data:
    print(i, data[i])

Предположение, что json является списком словарей как, Вы использовали, Вы должны будете:

for item in data:
    for key in item:
        print(key, item[key])

для составления двойного разыменования.

1
ответ дан jhelphenstine 26 June 2019 в 23:07
поделиться

Вы должны быть в состоянии загрузить весь список, не перестраивая его, просто используя json.load, затем итерируя по нему и диктуя

import json

with open("file.json", "r") as read_file:
    data = json.load(read_file)

for d in data:
    for i, (k, v) in enumerate(d.items()):
        print(i, k, v)

При этом я предлагаю вам сохранить файл как обычный файл JSON как кажется, первый ключ / значение в каждом dict должен быть полем ID, поэтому он должен выглядеть следующим образом:

{  
    "0": {
        "a":"3893",
        "b":"2389",
        "c":"1209"
    },
    "1": {
        "a":"4308",
        "b":"4560",
        "c":"9127"
    }
}

Что вы можете сделать, используя понимание слова:

with open("file.json", 'w') as out_file:
    json.dump({d.pop(""): d for d in data}, out_file, indent=4)

Тогда все, что вам нужно сделать, это просто перебрать слова:

with open("file.json", "r") as read_file:
    data = json.load(read_file)

    for _id, item in data.items():
        for k, v in item.items():
            print(_id, k, v)
0
ответ дан Jab 26 June 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: