将列表列表中字符串的出现与python中的字典进行比较

ShacharH

我有一个列表列表,每个列表中都有几个字符串。我想给ID一个清单中的项目。通过所需的输入和输出更容易解释。

输入(将是更大的数据集,但具有相同的结构):[[u'ID1',u'Loreal',(u'Loreal',u'P&G'),1、2],[u'ID1',u 'P&G',(u'Loreal',u'P&G'),1、2],[u'ID1',u'Loreal',(u'Loreal',u'Unilever'),2、1]]

欲望输出:[[u'ID1 'u'Loreal',(u'Loreal 'u'P&G '),1,2,1 ],[u'ID1',u'P&G',( u'Loreal 'u'P&G '),1,2,2 ],[u'ID1',u'Loreal',(u'Loreal 'u'Unilever'),2,1,1 ]

应根据位于每个列表的索引1中的公司名称来提供ID。例如Loreal为1,P&G为2,依此类推。

我的想法是创建一个字典,并检查每一行是否[1]是字典中的键。如果是,则添加该键的值(即ID)。否则,在键和ID的字典中​​创建一个键值对(使用计数器)。

到目前为止,我的代码:

stageTwoDic = {}
dictionaryCounter = 1
for row in stageTwoList:
    for key in stageTwoDic:
        if key == row[1]:
            stageTwoList.append(stageTwoDic[row[1]])
    else:
        stageTwoDic[row[1]] = dictionaryCounter
        stageTwoList.append(dictionaryCounter)
        dictionaryCounter += 1

我收到以下错误消息:

 if key == row[1]:
 TypeError: 'int' object has no attribute '__getitem__'
阿南德·库玛(Anand S Kumar)

代码中的基本问题是,您将整数(Counter)作为直接值附加到stageTwoList,而不是作为其子列表的元素(也就是说,应将其附加到rownot stageTwoList)。

这将导致最后一个元素stageTwoList为您附加的整数,因此当迭代到达该元素时,row即为int,因此尝试这样做row[1]会导致您得到错误。

同样,您无需循环将字典中的键循环抛出来检查键是否存在,您可以使用in运算符来实现。

您应该改为执行以下操作-

stageTwoDic = {}
dictionaryCounter = 1
for row in stageTwoList:
    if row[1] in stageTwoDic:
        row.append(stageTwoDic[row[1]])
    else:
        stageTwoDic[row[1]] = dictionaryCounter
        row.append(dictionaryCounter)
        dictionaryCounter += 1

演示-

>>> stageTwoList = [[u'ID1', u'Loreal', (u'Loreal', u'P&G'), 1, 2], [u'ID1', u'P&G', (u'Loreal', u'P&G'), 1, 2], [u'ID1', u'Loreal', (u'Loreal', u'Unilever'), 2, 1]]
>>> stageTwoDic = {}
>>> dictionaryCounter = 1
>>> for row in stageTwoList:
...     if row[1] in stageTwoDic:
...         row.append(stageTwoDic[row[1]])
...     else:
...         stageTwoDic[row[1]] = dictionaryCounter
...         row.append(dictionaryCounter)
...         dictionaryCounter += 1
...
>>> stageTwoList
[['ID1', 'Loreal', ('Loreal', 'P&G'), 1, 2, 1], ['ID1', 'P&G', ('Loreal', 'P&G'), 1, 2, 2], ['ID1', 'Loreal', ('Loreal', 'Unilever'), 2, 1, 1]]

只是为了完成起见,代码中的另一个问题是您实际上正在更新stageTwoList,即使row[1]在字典中找到了也是如此,因为您没有break在该if块内。如果循环正常退出(没有语句或异常),则将执行构造的else一部分for..elseforbreak

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将python中的两个字典与列表,字符串和整数进行比较?

加速将字典键和值与python列表中的字符串进行比较

计算列表列表中字符串的出现

计算列表列表中字符串的同时出现

将字符串与列表中的元素进行比较

将列表与字符串进行比较,并在字符串中打印列表的匹配行

列表列表中的字符串

列表列表中的字符串

Python将列表中的部分字符串相互比较

替换列表列表中的字符串python

Python列表列表中的字符串操作

从 Python 中的字符串创建列表列表

将字符串与元组列表中的元组进行比较-python

如何将字典列表与python中的列表进行比较

如何将字符串列表中的反向字符串与python中的原始字符串列表进行比较?

如何有效地将字典中的字符串列表与Python中的另一个字典列表进行比较?

Python根据列表中字符串的出现次数对字符串进行排序

根据子列表中的字母数字字符串对列表列表进行自然排序?

基于字典替换列表列表中字符串的有效方法

将列表与字典中的值进行比较

将项目列表与python中的字典进行比较

将Python列表中的键值与多个字典进行比较

将字符串转换为 Python 字典列表中的列表

在Python中如何从看起来像列表列表的字符串中获取列表列表

使用列表推导式,将递增的整数插入包含字符串的列表列表中

Python:将字符串拆分为列表列表

在python中对字典列表列表进行排序

如果列表列表中的字符串相同,如何从列表列表中添加整数?

断言等于将字符串和数组列表与Excel中的文本数据进行比较