Метод перебора значений списка или словаря без условного типа.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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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