gpt4 book ai didi

Python:将字符串列表 'keys' 枚举为整数

转载 作者:太空狗 更新时间:2023-10-30 01:54:59 24 4
gpt4 key购买 nike

我搜索了一段时间,但没有找到任何可以准确解释我正在尝试做的事情的内容。

基本上我有一个字符串“标签”列表,例如["brown", "black", "blue", "brown", "brown", "black"] 等。我想做的是将其转换为整数列表,其中每个标签对应一个整数,所以

["brown", "black", "blue", "brown", "brown", "black"]

成为

[1, 2, 3, 1, 1, 2]

我研究了枚举函数,但是当我给它我的字符串列表(很长)时,它为每个单独的标签分配了一个 int,而不是给相同的标签相同的 int:

[(1,"brown"),(2,"black"),(3,"blue"),(4,"brown"),(5,"brown"),(6,"black")]

我知道如何使用冗长而繁琐的 for 循环和 if-else 检查来完成此操作,但我真的很好奇是否有更优雅的方法仅用一两行即可完成此操作。

最佳答案

您有非唯一标签;您可以使用 defaultdict 结合计数器在第一次访问时生成数字:

from collections import defaultdict
from itertools import count
from functools import partial

label_to_number = defaultdict(partial(next, count(1)))
[(label_to_number[label], label) for label in labels]

这会按照标签在 labels 中首次出现的顺序生成计数。

演示:

>>> labels = ["brown", "black", "blue", "brown", "brown", "black"]
>>> label_to_number = defaultdict(partial(next, count(1)))
>>> [(label_to_number[label], label) for label in labels]
[(1, 'brown'), (2, 'black'), (3, 'blue'), (1, 'brown'), (1, 'brown'), (2, 'black')]

因为我们使用的是字典,标签到数字的查找成本是恒定的,所以整个操作将根据 labels 列表的长度花费线性时间。

或者,使用 set() 获取唯一值,然后将它们映射到 enumerate() 计数:

label_to_number = {label: i for i, label in enumerate(set(labels), 1)}
[(label_to_number[label], label) for label in labels]

这会更随意地分配数字,因为 set() 对象没有顺序:

>>> label_to_number = {label: i for i, label in enumerate(set(labels), 1)}
>>> [(label_to_number[label], label) for label in labels]
[(2, 'brown'), (3, 'black'), (1, 'blue'), (2, 'brown'), (2, 'brown'), (3, 'black')]

虽然这需要遍历 labels 两次。

这两种方法都不需要您先定义标签字典;映射是自动创建的。

关于Python:将字符串列表 'keys' 枚举为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17152468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com