Создание словаря для цикла, возвращающего последнюю итерацию - PullRequest
0 голосов
/ 05 июня 2018

Я перебираю следующий JSON:

 "item 1": { 
    "property 1": "value 1",
    "property 2": "value 2",
    "property 3": "value 3"
},
"item 2": {
    "property 1": "value 1",
    "property 2": "value 2",
    "property 3": "value 3"
}

Я хотел бы создать словарь со значениями первых двух ключей - property 1, property 2 - для каждого элемента (т.е. исключая property 3).В следующем коде достигается желаемый результат, но сохраняется только самая последняя последовательность:

for i in JSON:
    value 1 = i["value 1"]
    value 2 = i["value 2"]
    ...
    JSON = json.dumps({'property 1':value 1,'property 2':value 2...})
return json.loads(JSON)

>> "item 2": {
   "property 1": "value 1",
   "property 2": "value 2" ...
   # returns item 2, but I'd like item 1 also

Как сохранить каждый вывод каждого item без перезаписи другого?

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Вот еще один вариант, использующий метод items и понимание слова:

data = {"item 1": { 
    "property 1": "value 1",
    "property 2": "value 2",
    "property 3": "value 3"
},
"item 2": {
    "property 1": "value 1",
    "property 2": "value 2",
    "property 3": "value 3"
}
}

new_data = {}
for index, value in data.items():
    new_data.update({index: {k:v for k, v in value.items() if k != "property 3"}})
print(new_data)

Вывод:

{'item 1': {'property 1': 'value 1', 'property 2': 'value 2'},
 'item 2': {'property 1': 'value 1', 'property 2': 'value 2'}}
0 голосов
/ 05 июня 2018

Использование простой итерации.

Пример:

data = {"item 1": { 
    "property 1": "value 1",
    "property 2": "value 2",
    "property 3": "value 3"
},
"item 2": {
    "property 1": "value 1",
    "property 2": "value 2",
    "property 3": "value 3"
}
}

d = {}
for i in data:
    d[i] = {"property 1": data[i]["property 1"], "property 2": data[i]["property 2"]}
print( d )

Вывод:

{'item 2': {'property 1': 'value 1', 'property 2': 'value 2'}, 'item 1': {'property 1': 'value 1', 'property 2': 'value 2'}}
...