Chcę funkcji, która zwykle przyjmuje argument typu X, gdzie X jest skalarem, listą lub dyktatem, i zwraca listę X z tymi samymi kluczami wartości, na podstawie innych informacji.Najlepszy sposób na rozróżnienie między argumentami skalarnymi, listowymi i dict w Pythonie?
def foo(info, k):
return [bar(item,k) for item in processInfo(info)]
def bar(item, keydata):
# pseudocode follows.
# What we want to do is return an output of parallel type to the input key k,
# using the key data to lookup information from the input item.
if keydata is a scalar:
return item[keydata]
elif keydata is a list:
return [item[k] for k in keydata]
elif keydata is a dict:
return dict((k,item[v]) for (k,v) in keydata.iteritems())
else:
raise ValueError('bar expects a scalar, list, or dict')
Moje pytanie brzmi: jak mogę wysłać między tymi trzema typami?
edytuj: Ciąg znaków należy interpretować jako skalar, a nie jako listę/iterowalną. Krotki należy interpretować jako iterowalne.
edit 2: Chcę pisać na maszynie, a nie ściśle pisać.
co, jeśli obiekt może wykazywać zarówno zachowania listy, jak i dyktatu? – Meitham
zachowanie w przypadku elementów podobnych do dictwa ma pierwszeństwo przed zachowaniem dla elementów iterowalnych. –
To pytanie wymaga zmiany nazwy, ponieważ jest to najlepsze rozwiązanie do określania różnicy między dict i listą, a nie tylko między skalarem i niesubtelnym, jak sugeruje tytuł. Nadal pomijam to w wyszukiwaniach. – SystemParadox