Метод перебора значений списка или словаря без условного типа.Python

Программы на Python
Anonymous
Метод перебора значений списка или словаря без условного типа.

Сообщение Anonymous »

У меня есть переменная, которая может быть списком или словарем, и я хочу иметь возможность вызывать одну функцию, которая будет что-то делать со всеми значениями в обоих случаях.
Таким образом:

Код: Выделить всё

def do_stuff_to_values(obj):
for v in obj.values():
# do stuff with v
Но если я реализую это таким образом, то это будет работать только для словарей, поскольку в списках нет метода значений(). Я могу использовать isinstance, чтобы проверить, является ли это словарем:

Код: Выделить всё

def do_stuff_to_values(obj):
for v in (obj.values() if isinstance(obj, dict) else obj):
# do stuff with v
Есть ли способ выразить это в Python, чтобы словари и списки обрабатывались одинаково (или фактически строки, кортежи, массивы и наборы тоже)?
Казалось бы, что все встроенные типы последовательностей должны иметь метод итератора значений, есть ли причина, по которой они этого не делают? Или я что-то упускаю?
Это код, который я тестировал:

Код: Выделить всё

mydict = {'k1': 'dv1', 'k2': 'dv2'}

myarray = ['av1', 'av2']

def get_values(obj):
return [i for i in (obj.values() if isinstance(obj, dict) else obj)]

print(get_values(mydict))
print(get_values(myarray))
Python-Fiddle

Подробнее здесь: https://stackoverflow.com/questions/799 ... t-a-type-c

Вернуться в «Python»