gpt4 book ai didi

python - 检查列表值并将其分配给 python 中的字典键

转载 作者:行者123 更新时间:2023-12-01 02:38:18 25 4
gpt4 key购买 nike

我有一个单词列表如下。

mylist = ['cat', 'yellow', 'car', 'red', 'green', 'jeep', 'rat','lorry']

我还有数据集中每篇文章的列表列表,其中包含“mylist”的值,如下例所示(即,如果“mylist”一词出现在文章中,我将其设置为 1,否则设置为 0)。

[[0,1,0,0,0,1,0,1], [1,0,0,0,0,1,0,0]]

换句话说,

[0,1,0,0,0,1,0,1] says that this only has values 'yellow', 'jeep', 'lorry'

现在我有一个类别字典,如下所示。

mydictionary = {'colour': ['red', 'yellow', 'green'], 'animal': ['rat','cat'], 
'vehicle': ['car', 'jeep']}

现在,通过使用“mydictionary”键值,我想按如下方式转换列表列表(也就是说,如果“mylist”的一个或多个值为 1,我将键标记为 1,否则标记为 0)。

[[1,0,1], [0,1,0]]

换句话说,

[1,0,1] says that;
1 - one or more '1's for elements in 'colours'
0 - no elements in 'animals'
0 - one or more '1's for elements in 'vehicles'

所以我的输出应该是上面提到的列表的列表 -> [[1,0,1], [0,1,0]]

我是 pandas 的新手,因此,我有兴趣知道是否可以使用 pandas 数据框来做到这一点。

最佳答案

设置

a = np.array(['cat', 'yellow', 'car', 'red', 'green', 'jeep', 'rat','lorry'])
b = np.array([[0,1,0,0,0,1,0,1], [1,0,0,0,0,1,0,0]], dtype=bool)

mydictionary = {
'colour': ['red', 'yellow', 'green'],
'animal': ['rat','cat'],
'vehicle': ['car', 'jeep']
}
<小时/>

解决方案
一些小的额外设置
我只需要以正确的顺序获取一组集合。

o = ['colour', 'animal', 'vehicle']
s = pd.Series(mydictionary).apply(set).loc[o]

s

colour {green, red, yellow}
animal {cat, rat}
vehicle {jeep, car}
dtype: object

使用 setnumpy 广播的交集

(s.values & [[set(a[l])] for l in b]).astype(bool).astype(int)

array([[1, 0, 1],
[0, 1, 1]])
<小时/>

附加说明

如果我要使用 numpy 广播并且我已经有了一系列具有值的

s.values

[{'green', 'red', 'yellow'} {'cat', 'rat'} {'jeep', 'car'}]

然后我需要一个带有其他集合的二维数组

[[set(a[l])] for l in b]

[[{'jeep', 'lorry', 'yellow'}], [{'cat', 'jeep'}]]

当我广播&操作时

s.values & [[set(a[l])] for l in b]

[[{'yellow'} set() {'jeep'}]
[set() {'cat'} {'jeep'}]]

方便的是,在 bool 上下文中,空集计算结果为 False,非空集计算结果为 True。遵循 int 上下文,我们就有了解决方案。

(s.values & [[set(a[l])] for l in b]).astype(bool).astype(int)

array([[1, 0, 1],
[0, 1, 1]])

关于python - 检查列表值并将其分配给 python 中的字典键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45993406/

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