Проверьте список dic и добавьте значения - PullRequest
0 голосов
/ 12 ноября 2018

У меня следующая проблема:

У меня есть список диктовок, и я хочу просмотреть список ( temp_list ) и проверить:

  • если значение dic ["z"] из temp [x] и temp [y] находится в диапазоне distance_value .
  • если нет, вставьте новый dict между temp [x] и temp [y] , который содержит z_value of ( temp [ y] -temp [x]) / 2 ), назовем его dic_x_y
  • затем заполните оставшиеся значения нового вставленного dic ( dic_x_y ["t1"] , dic_x_y ["angle1"] и dic_x_y ["material"] ) со значениями dic в temp [x]

Вот данные со списком и переменной:

    distance_value = 1000

    temp = [
    {
      "z": 1450,
      "t1": 0,
      "angle1": 90,
      "material": "Balsa 150"
    },
    {
      "z": 1950,
      "t1": 25,
      "angle1": 90,
      "material": "Balsa 150"
    },
    {
      "z": 12800,
      "t1": 25,
      "angle1": 90,
      "material": "Balsa 150"
    },
    {
      "z": 13000,
      "t1": 15,
      "angle1": 90,
      "material": "Balsa 150"
    },
    {
      "z": 25900,
      "t1": 15,
      "angle1": 90,
      "material": "Balsa 150"
    },
    {
      "z": 26000,
      "t1": 10,
      "angle1": 90,
      "material": "Balsa 150"
    }]

Я много искал свою проблему, но не смог найти ответ. Я надеюсь, что смогу четко изложить свою проблему, и кто-то может мне помочь. Заранее большое спасибо.

Я действительно не знаю, с чего начать, но вот моя идея, что я не могу приступить к работе:

distance_value = 1000

for dic in temp: 
if "dic["z"] +1 (second element of the list) - dic["z"] < distance_value:
    new_dic = {"z": (dic["z"]+1 - dic["z"]), "t1": dic["t1"] , "angle1":dic["angle1"], "material":dic["material"] }
    temp.insert[dic["z"]+1, new_dic]

1 Ответ

0 голосов
/ 12 ноября 2018

Из моего json тестового файла test.json:

[
    {
      "z": 1450,
      "t1": 0,
      "angle1": 90,
      "material": "Balsa 150"
    },
    {
      "z": 1950,
      "t1": 25,
      "angle1": 90,
      "material": "Balsa 150"
    },
    {
      "z": 12800,
      "t1": 25,
      "angle1": 90,
      "material": "Balsa 150"
    },
    {
      "z": 13000,
      "t1": 15,
      "angle1": 90,
      "material": "Balsa 150"
    },
    {
      "z": 25900,
      "t1": 15,
      "angle1": 90,
      "material": "Balsa 150"
    },
    {
      "z": 26000,
      "t1": 10,
      "angle1": 90,
      "material": "Balsa 150"
    }]

Код python :

import json
with open('test.json') as f:
    temp = json.load(f)
distance_value = 1000

temp.sort(key=lambda k: k['z'])
counter = 0
Continue = True
while (Continue):
    for i in range (0,len(temp)-1):
        if(temp[i+1]['z'] - temp[i]['z'] > distance_value):
            Continue = True
            new_dic = {"z": (temp[i+1]['z'] + temp[i]['z'])/2., "t1": temp[i]['t1'], "angle1": 90, "material": temp[i]['material']}
            temp.append(new_dic)
            temp.sort(key=lambda k: k['z'])
            break
        else:
            Continue = False

temp_as_string = json.dumps(temp, sort_keys=True, indent=4, separators=(',', ': '))
print(temp_as_string)

my output :

[
    [
{
    "z": 1450,
    "t1": 0,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 1950,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 2628.125,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 3306.25,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 3984.375,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 4662.5,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 5340.625,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 6018.75,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 6696.875,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 7375.0,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 8053.125,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 8731.25,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 9409.375,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 10087.5,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 10765.625,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 11443.75,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 12121.875,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 12800,
    "t1": 25,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 13000,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 13806.25,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 14612.5,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 15418.75,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 16225.0,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 17031.25,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 17837.5,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 18643.75,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 19450.0,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 20256.25,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 21062.5,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 21868.75,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 22675.0,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 23481.25,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 24287.5,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 25093.75,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 25900,
    "t1": 15,
    "angle1": 90,
    "material": "Balsa 150"
},
{
    "z": 26000,
    "t1": 10,
    "angle1": 90,
    "material": "Balsa 150"
}
]
[Finished in 0.096s]

Логика следующая:

  1. Запустить цикл while с условием, Должен ли я продолжать цикл над своими словарями и проверять? : Continue
  2. Внутри цикла while переберите текущие элементы списка, проверьте, есть ли в любом возможном списке [i + 1] ['z'] - список [i] ['z'] больше установленного расстояния (это проверка цикла)
  3. если найден, то создайте новый диктовку со средним значением Z, добавьте и пересортируйте (это очень важно), а затем прервите цикл for (прервите проверку цикла при первом появлении), нарушив условие Continue для цикла while все еще верно
  4. На более позднем этапе в цикле while, когда мы проходим через цикл for и проверяем, что условие не найдено, Continue ложно и цикл while прерывается
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...