Создайте словарь значений ячеек с разными размерами ячеек - python - PullRequest
0 голосов
/ 08 мая 2020

Я хотел бы создать словарь значений ячеек с разными размерами ячеек и приращениями. Например,

Starting increment is 5, through 10 (e.g. 0-5, 6-10)
Then, increments of 10, through 100 (e.g. 11-20, 21-30...91-100)
Then increments of 25, through 200 (e.g. 101-125, 126-150...176-200)

В словаре

bin_dict = {0-10 :[0-5, 6-10], 10-100:[11-20, 21-30, ...91-100], 100-200:[101-125, 126-150..]}

Я пробовал следующий код:

def create_bin_ranges(bn_val):
    ## Create a list of bin ranges.
    dict_bin_ranges = {}
    list_bin_ranges = []

    for i in bn_val:
        step = i
        bin_range = np.arange(0, step+i, step)
        list_bin_ranges.append(bin_range)
        dict_bin_ranges[i] = list_bin_ranges
    return dict_bin_ranges

Результат, который я получаю: (Это не то, что я хочу)

values = create_bin_ranges([5,10,100])
print(values)
>> {5: [array([0, 5]), array([ 0, 10]), array([  0, 100])],
   10: [array([0, 5]), array([ 0, 10]), array([  0, 100])],
   100: [array([0, 5]), array([ 0, 10]), array([  0, 100])]}

Я застрял, любое предложение или помощь были бы замечательными.

1 Ответ

1 голос
/ 08 мая 2020

Я думаю, вам нужно сначала четко определить лог c за корзиной. Одно из решений - определить список для всех шагов, на которых range изменяется на:

  • start_bin
  • end_bin
  • step

Для примера это приводит к:

steps = [(0, 10, 5), (10, 100, 10), (100, 200, 25)]

Как только мы узнаем, куда go, довольно легко построить все бункеры:

Здесь, Я определяю пользовательскую функцию для клавиш вывода, используя str.format.

def f(v1, v2):
    return "{}-{}".format(str(v1), str(v2))

Затем создайте список:

# List + dict comprehension
out = {f(min_, max_): [[i+1, i+step] for i in range(min_, max_, step)] for min_, max_, step in steps}

# Or with nested for loops
out = {}
for min_, max_, step in steps:
    bin_ = []
    for i in range(min_, max_, step):
        bin_.append([i+1, i+step])
    out[f(min_, max_)] = bin_
print(out)

вывод :

# {
#     '0-10': [[1, 5], [6, 10]], 
#     '10-100': [[11, 20], [21, 30], [31, 40], [41, 50], [51, 60], [61, 70], [71, 80], [81, 90], [91, 100]],
#     '100-200': [[101, 125], [126, 150], [151, 175], [176, 200]]
# }

Надеюсь, что это поможет!

...