我想创建一个具有不同bin大小和增量的bin值字典。例如,
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])]}
我被困住了,任何建议或帮助都会很棒。
我认为您首先需要明确定义垃圾箱背后的逻辑。一种解决方案是为range
更改的所有步骤定义一个列表:
start_bin
end_bin
step
例如,这导致:
steps = [(0, 10, 5), (10, 100, 10), (100, 200, 25)]
一旦我们知道要去哪里,就很容易建立所有垃圾箱:
这里,我使用str.format
为输出键定义了一个自定义功能。
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)
希望有帮助!