python中的类/函数,其中每个值都分配了一个增加的唯一编号

时间:2017-03-10 20:45:44

标签: python python-3.x

Python中是否存在数据结构/函数,其中为每个被调用的值分配了增加的“id”数

具体地,输入的第一个值(例如,“a”)将获得id值0,下一个(例如,“b”)将获得id 1,并且如果使用更早的值(例如,再次使用“a”)它会得到原始值(即0))

目前我使用以下代码,但想知道它是否可能是内置函数。

maximum_number, all_id_numbers = 0, {}
def return_increasing_id(word):
    global maximum_number
    try:
        return(all_id_numbers[word])
    except KeyError:
        all_id_numbers[word] = maximum_number
        maximum_number = maximum_number +1
        return(all_id_numbers[word])

3 个答案:

答案 0 :(得分:2)

你可以使用defaultdict和你自己的函数传递给它来清理一些东西。

编辑感谢@Rawing。现在很干净!

EDIT2感谢@JonClements,它现在是一个单行

CODE:

from collections import defaultdict
from itertools import count

d = defaultdict(lambda n=count(): next(n))

print(d['a'])
print(d['b'])
print(d['c'])

print(d['a'])
print(d['b'])
print(d['c'])

输出:

0
1
2
0
1
2

答案 1 :(得分:0)

您可以使用简单列表,并将索引作为ID。这样,id就可以保证是唯一的,而且它会像你想要的那样“增加”。我不明白为什么你会让自己头疼,试图制作自己的ID分配逻辑,这可能会给你的代码带来更多错误。

编辑:按索引查找列表的时间实际上是O(1),请参阅:https://wiki.python.org/moin/TimeComplexity

答案 2 :(得分:0)

Python 3教程section 3.1.3将List数据类型引入:

  

Python知道许多复合数据类型,用于组合在一起   其他价值观。最通用的是列表,可以写成   方括号之间的逗号分隔值(项)列表。

在代码中创建列表时,您将某个值添加到序列中充当键的位置。您在问题中使用的字典数据类型允许您明确指定密钥。

如果您想创建一个包含文本语料库中出现次数的词典,请参阅下面的示例。

sentence = 'The quick brown fox jumps the brown log'
for word in sentence[i].split(" "):
            word_dict[word] += 1

word_dict = {
 'The': 1, 'quick': 1,  'brown': 2, 'fox': 1,
 'jumps': 1,  'the': 1, 'log': 1}

虽然创建一个函数来推送字典中的单词并增加计数器是一个好的开始,但您可能需要查看Bag of Words models on Kaggle的教程。本教程概述了处理文本时使用的其他技术。