Voglio una funzione che normalmente contiene un argomento di tipo X in cui X è uno scalare, un elenco o un dict e restituisce un elenco di X con gli stessi valori chiave, in base ad altre informazioni.Il modo migliore per distinguere tra gli argomenti scalari, elenco e dict in Python?
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')
La mia domanda è, come posso effettuare la spedizione tra i tre tipi?
modifica: una stringa deve essere interpretata come scalare, non come lista/iterabile. Le tuple devono essere interpretate come iterabili.
modifica 2: Voglio digitazione anatra, non tipizzazione rigorosa.
cosa succede se un oggetto può mostrare entrambi i comportamenti di una lista e un dict? – Meitham
quindi il comportamento per elementi dict-like ha la precedenza sul comportamento per gli elementi iterabili –
Questa domanda deve essere rinominata, poiché è la migliore per determinare la differenza tra dict e list, non solo tra scalare e nonscalare come implica il titolo. Continuo a saltarci sopra nelle ricerche. – SystemParadox