Используйте collections.defaultdict()
object с itertools.count()
object соорудили, чтобы произвести следующее значение в качестве завода; это позволит избежать необходимости тестировать каждый ключ самостоятельно, а также увеличивать вручную.
Затем используйте список понимание, чтобы поместить эти цифры в списке:
from collections import defaultdict
from functools import partial
from itertools import count
unique_count = defaultdict(partial(next, count(1)))
listFruit[:] = [unique_count[el] for el in listFruit]
functools.partial()
callable создает оболочку вокруг next()
function, чтобы гарантировать, что код работает в любом Python 2 или Python 3.
Я использовал здесь целочисленный счет, начиная с 1
. Вы можете заменить count(1)
на count(1.0)
, если вы настаиваете на наличии значений с плавающей запятой; вы получите 1.0
, 2.0
, 3.0
и т. д. вместо этого.
Демо:
>>> from collections import defaultdict
>>> from functools import partial
>>> from itertools import count
>>> from random import choice
>>> fruits = ['apple', 'banana', 'pear', 'cherry', 'melon', 'kiwi', 'pineapple']
>>> listFruit = [choice(fruits) for _ in xrange(100)]
>>> unique_count = defaultdict(partial(next, count(1)))
>>> [unique_count[el] for el in listFruit]
[1, 2, 3, 2, 4, 5, 6, 7, 1, 2, 4, 6, 3, 7, 3, 4, 5, 2, 5, 7, 3, 5, 1, 3, 3, 5, 2, 2, 6, 4, 6, 2, 1, 1, 3, 6, 6, 4, 7, 2, 6, 4, 5, 2, 1, 7, 7, 7, 4, 3, 7, 3, 1, 1, 5, 3, 3, 6, 5, 6, 1, 4, 3, 7, 2, 7, 7, 4, 7, 1, 4, 3, 7, 3, 4, 5, 1, 5, 5, 1, 5, 6, 3, 4, 3, 1, 1, 1, 5, 7, 2, 2, 6, 3, 6, 1, 1, 6, 5, 4]
>>> unique_count
defaultdict(<functools.partial object at 0x1026c5788>, {'kiwi': 4, 'apple': 1, 'cherry': 5, 'pear': 2, 'pineapple': 6, 'melon': 7, 'banana': 3})
Вы имеете в виду вы хотите присвоить уникальный номер каждого плода? –
Да. Apple должна быть 1 всегда, Банан 2 Клубника 3 .... до ananas 7. –
Примечание: 'has_key' устарел. Чтобы проверить, используется ли ключ в словаре, используйте «ключ в словаре». В вашем случае: 'if el not in dic'. Также я понятия не имею, почему вы назначаете числа с плавающей запятой .... – Bakuriu