Python 如何检查类的一部分是否是列表的一部分
我有一个类,它由一个先前确定的列表中的随机行填充。该列表由CSV文件填充。该类如下所示:Python 如何检查类的一部分是否是列表的一部分,python,python-3.x,Python,Python 3.x,我有一个类,它由一个先前确定的列表中的随机行填充。该列表由CSV文件填充。该类如下所示: class Gem: def __init__ (self, name, value): self.name = name self.value = float(value) 使用类正确填充列表和项目。我有6个列表,我需要检查item.name是否是其中的一部分。我想: if item.name in COMMONGEMS: item.value = ran
class Gem:
def __init__ (self, name, value):
self.name = name
self.value = float(value)
使用类正确填充列表和项目。我有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']]
如果item.name是类似“Banded”的字符串,则在COMMONGEMS中找不到item.name
['Banded',0']在COMMONGEMS=>true
COMMONGEMS中的“带状”=>false
编辑:
您可以使用字典代替列表:
COMMONGEMS = {'Banded': '0' , 'Azurite' : '0'}
if item.name in COMMONGEMS:
item.value = random.range(4, 17)
如果item.name是类似“Banded”的字符串,则在COMMONGEMS中找不到item.name
['Banded',0']在COMMONGEMS=>true
COMMONGEMS中的“带状”=>false
编辑:
您可以使用字典代替列表:
COMMONGEMS = {'Banded': '0' , 'Azurite' : '0'}
if item.name in COMMONGEMS:
item.value = random.range(4, 17)
您当前的代码未检查列表列表中的名称。它只是检查内部列表本身,它与您的查询不匹配。 一个简单的循环可以在名称处查看内部列表:
for element in COMMONGEMS:
if item.name == element[0]:
item.value = random.range(4, 17)
我在中使用了
=
而不是,因为可能有一个gem在
另一个名称中有一个名称,但不是该名称。例如ruby
匹配starruby
等。您当前的代码没有检查列表列表中的名称。它只是检查内部列表本身,它与您的查询不匹配。
一个简单的循环可以在名称处查看内部列表:
for element in COMMONGEMS:
if item.name == element[0]:
item.value = random.range(4, 17)
我在
中使用了=
而不是,因为可能有一个gem在
另一个名称中有一个名称,但不是该名称。例如ruby
匹配starruby
等。是名称列表还是Gem
实例列表?你能举个例子吗?@interjay我已经编辑了这个问题并回答了你。谢谢你的帮助!它是一个名称列表还是一个Gem
实例列表?你能举个例子吗?@interjay我已经编辑了这个问题并回答了你。谢谢你的帮助!虽然这是真的,但它并没有回答问题。+1对于字典,您可以进一步使用csv.DictReader
。这是一个好主意,但我可能会在某个时候向gems类添加一个描述,我认为字典不适用于此。不过,谢谢你,我以后会记住这一点。虽然这是事实,但它并不能回答问题。+1对于字典,你可以更进一步,也可以使用csv.DictReader
。这是一个好主意,但我可能会在某个时候向gems类添加一个描述,我认为字典不适合这样做。不过谢谢,我以后会记住这一点。是检查身份,而不是平等。使用=
。最好使用我认为如果有的话(item.name==e[0]表示COMMONGEMS中的e):
我讨论过使用any
,但他可能需要元素本身作为值,所以我保留了原样<代码>任何
都很棒。也许下一步(itertools.dropwhile(lambda e:item.name!=e[0],COMMONGEMS),没有)
使用==似乎很有效,或者至少我比以前更进一步了。我得到了另一个错误:item.value=random.range(2,9)AttributeError:“module”对象没有属性“range”,这是谎言,我不知道它为什么会带着这个返回。我相信这是无关的,所以我将打开另一个问题。感谢您的帮助。is
检查身份,而不是平等。使用=
。最好使用我认为如果有的话(item.name==e[0]表示COMMONGEMS中的e):
我讨论过使用any
,但他可能需要元素本身作为值,所以我保留了原样<代码>任何都很棒。也许下一步(itertools.dropwhile(lambda e:item.name!=e[0],COMMONGEMS),没有)使用==似乎很有效,或者至少我比以前更进一步了。我得到了另一个错误:item.value=random.range(2,9)AttributeError:“module”对象没有属性“range”,这是谎言,我不知道它为什么会带着这个返回。我相信这是无关的,所以我将打开另一个问题。谢谢你的帮助。