Не устаревший способ сделать это (используя .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));
}
}
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
Первая часть Вашей проблемы находится в Вашем перечисляла вызов:
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])
для составления двойного разыменования.
Вы должны быть в состоянии загрузить весь список, не перестраивая его, просто используя 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)