我有一个由先前确定的列表中的随机行填充的类。该列表由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']]
答案 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}}等。