如何检查类的一部分是否是列表的一部分

时间:2013-06-03 12:24:35

标签: python python-3.x

我有一个由先前确定的列表中的随机行填充的类。该列表由CSV文件填充。该课程如下:

class Gem:
    def __init__ (self, name, value):
        self.name = name
        self.value = float(value)

列表正确填充,并使用该类正确填充Item。我有6个列表,我需要检查item.name是否属于其中任何一个。我想:

if item.name in COMMONGEMS:
    item.value = random.range(4, 17)

我为每个列表执行此操作,但是虽然我没有收到任何错误,但是它应该得到匹配。

我应该如何完成这项工作?

编辑:为了回应interjey,列表在从CSV加载后看起来像这样:

print (COMMONGEMS)
[['Banded', '0'], ['Eye Agate', '0'], ['Moss Agate', '0'], ['Azurite', '0'], ['Blue quartz', '0'], ['Hematite', '0'], ['Lapis Lazuli', '0'], ['Malachite', '0'], ['Obsidian', '0'], ['Rhodochrosite', '0'], ['Tiger Eye', '0'], ['Turquoise', '0'], ['Freshwater', '0'], ['Irregular Pearl', '0']]

2 个答案:

答案 0 :(得分:2)

如果item.name是“Banded”之类的字符串,则在COMMONGEMS中找不到item.name。

['Banded', '0'] in COMMONGEMS => true

'Banded' in COMMONGEMS => false

修改 您可以使用字典代替列表:

COMMONGEMS = {'Banded': '0' , 'Azurite' : '0'}

if item.name in COMMONGEMS:
    item.value = random.range(4, 17)

答案 1 :(得分:2)

您当前的代码未检查列表列表中的名称。它只检查内部列表本身与您的查询不匹配。 一个简单的循环可以在名称中查看内部列表:

for element in COMMONGEMS:
    if item.name == element[0]:
        item.value = random.range(4, 17)

我使用==而不是in,因为可能有一个名称为in的名称为ruby的gem,但不是该名称。例如star ruby匹配{{1}}等。