cdgriffith / cdgriffith/Box

Keys method with (dotted=True) gives multiplication of the same key

Open
#237 1 comment 0 reactions 0 assignees View on GitHub
wontfix
Dominant language
Python
Stars
2.8k
Forks
135
PR merge metrics
No merged PRs in 30d

Description

Bug of keys in Box:

When you use `keys()` method in a "dotted" situation, meaning we have a tree of keys in a Box, and you want to get the keys of a given node, one can notice that we get back a list of keys that are multiplicated if the value of a key is a list. (and the multiplication is by the lengh of the list)

For example:

 

```
b = Box({
"Animals" : {"Land_animals" : ["Lion", "Elephant"], "Sea_animals" : ["Dolphin", "Shark"]},
"Trees" : ["Palm_tree", "Coconut_tree"]
}, box_dots = True)

 
```

When you are using `keys = b.keys(dotted = True)` you get -

```
['Animals.Land_animals[0]',
'Animals.Land_animals[1]',
'Animals.Sea_animals[0]',
'Animals.Sea_animals[1]',
'Trees[0]',
'Trees[1]']

```
and we can see the multiple occurances of the keys (with indexes of their number of values), and the method `len(keys)` would have wrong answer - 6 instead of 3.

The output which I thought would be right is: `['Animals.Land_animals', 'Animals.Sea_animals', 'Trees']`

 

A workaround is to add to the box this:

`box_intact_types = (tuple,list)`

so that lists wouldn't be converted, and than it works fine.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.