web-dev-qa-db-fra.com

TypeError: l'argument Zip # 1 doit prendre en charge l'itération

for k,v in targets.iteritems():
    price= str(v['stockprice'])

    Bids = str(u''.join(v['OtherBids']))
    Bids = Bids.split(',')

    # create a list of unique bids by ranking
    for a, b in Zip(float(price), Bids):
        try:
            del b[next(i for i, e in enumerate(b) if format(e, '.4f')  == a)]
        except StopIteration:
            pass

J'extrais des données de mon dictionnaire mais il semble que toutes soient en unicode. Comment puis-je me débarrasser du non-sens unicode?

13
Ting Ping

Je suppose que votre code vous donne le message d'erreur, TypeError: l'argument Zip # 1 doit prendre en charge l'itération . Vous obtenez cette erreur en raison de l'expression Zip(float(price), Bids). Ce code simplifié illustre l'erreur:

>>> price = str(u'12.3456')
>>> bids = ['1.0', '2.0']
>>> Zip(float(price), bids)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Zip argument #1 must support iteration

La Python 2.x Zip() fonction de bibliothèque intégrée requiert que tous ses arguments soient itérables. float(price) n'est pas un itérable.

Si vous souhaitez créer des tuples combinant float(price) avec chaque élément du tableau Bids, vous pouvez utiliser itertools.repeat() dans la première expression d'argument.

>>> import itertools
>>> price = str(u'12.3456')
>>> bids = ['1.0', '2.0']
>>> Zip(itertools.repeat(float(price),len(bids)), bids)
[(12.345599999999999, '1.0'), (12.345599999999999, '2.0')]

Je ne vois pas que votre utilisation des types de données Unicode a quelque chose à voir avec le TypeError.

15
Jim DeLaHunt