21.12.2018 23:13, John Snow wrote:
> 
> 
> On 12/21/18 7:41 AM, Vladimir Sementsov-Ogievskiy wrote:
>> Hmm. This made me check, is enumerate applicable to dicts,
>> and, yes it is.
>>
> 
> enumerate on dicts gives you a numerical index paired with the key,
> so... k is the numerical index and v is the key.

hmm, yes, I was wrong. Ok, than I'm fine with your code. Take my r-b.

> 
>> so, it may be as easy as
>>
>>       for k, v in enumerate(qmsg):
>>           if isinstance(v, list) or isinstance(v, dict):
>>               qmsg[k] = filter_qmp(v, filter_fn)
> 
>                      ^ this will break if qmsg was a dict.
> 
>>           else:
>>               qmsg[k] = filter_fn(k, v)
>>
>> with this:
>> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com>
>>
>>
>> But does it what you want?
>> So, for lists of strings, filter_fn will get pair of index in array
>> and value?
>> On the other hand, we can adjust the behavior as we want when we introduce
>> such filters.
> 
> I'm not sure what I want...
> 
> Named index is the best, but isn't always available because like you
> say, the object we are passed is not always a dictionary. We could
> theoretically have a list of lists somewhere. What key would I pass
> then? It's meaningless.
> 
> I could change qmp_filter to pass the k,v to the filter when it finds
> the "last dictionary," i.e. if it recursively finds no more dictionaries
> underneath, it passes the value along regardless of whatever it finds.
> This is a bit more complex because I think I'd need a co-mutual
> recursive function to "travel" each value and report if there are
> further dictionaries down below.
> 
> Or, I could just leave the filter as-is where it only ever gets one,
> non-dict/non-list item and receives a key. Sometimes the key will now be
> a numerical index which is likely not useful...
> 
> I might stage this as-is for now. Let's revisit it before 4.0 rc0.
> 
> --js
> 


-- 
Best regards,
Vladimir

Reply via email to