получить размер массива или строки - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь l oop через словарь получить размер каждого элемента, связанного с каждым из ключей. Эти элементы словаря представляют собой массивы или строку. Если это строка, мне нужно количество символов в строке. Если это массив, мне нужен размер массива.

import numpy as np
myDict = {'string':  'this is a string', 'arraySingle': np.array(12),
          'array1': np.array([12]), 'multiarray': np.array((12, 12))}
for key in myDict.keys():
    size = np.size(myDict[key])  
    try:
        length = len(myDict[key])
    except TypeError:
        length = None
    print('key "{}" has a length of {} and a size of {} '.format(key, length, size))

производит

key string has a length of 16 and a size of 1 
key arraySingle has a length of None and a size of 1 
key array1 has a length of 1 and a size of 1 
key multiarray has a length of 2 and a size of 2 

Я бы действительно хотел получить ответ:

key "string" has a ___ of 16 
key "arraySingle" has ___ of 1
key "array1" has a ___ of 1 
key "multiarray" has a ___ of 2 

как мне получить этот ответ элегантно? Я хотел бы сделать это в одну строку, а не использовать что-то вроде

if isisntance(myDict[key], str):
   print("do something")
elif isinstance(myDict[key], np.ndarray):
   print("do something else")

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Я не уверен, что вы ищете, но думаю, это поможет решить ваш вопрос:

import numpy as np
myDict = {'string':  'this is a string', 'array': np.array((12))}
for key in myDict.keys():
    try:
        length = len(myDict[key])
        length_type = 'length' 
    except TypeError:
        length = np.size(myDict[key])
        length_type = 'size' 

    print('key "{}" has a {} of {}'.format(key, length_type, length))

вывод:

key "string" has a length of 16
key "array" has a size of 1
0 голосов
/ 07 мая 2020

Если у вас есть сложный лог c, который вы хотите убрать, упакуйте его в отдельную функцию.

def size(x):
    if isinstance(x, np.array):
        return np.size(x)
    try:
        return len(x)
    except TypeError:
        return 1

print('key "{}" has a size of {}'.format(key, size(myDict[key])))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...