基于Python

时间:2018-05-23 17:13:24

标签: python python-2.7

只是想知道是否有更优雅的方法从列表中的特定对象检索值,具体取决于对象是否包含特定值,或者我是否必须编写内容来遍历列表并查看每个对象。例如:

class C(object):
    def __init__(self, url, value):
        self.url=url
        self.value=value

obj1 = C("http://1", 1)
obj2 = C("http://2", 2)
mylist = [obj1, obj2]

# I want to search  mylist and retrieve the "value" element if there is
# an object with a "url" value of "http://2"...basically retrieve the 
# value 2 if an element exists in the list with a url value of "http://2"

当然,如果我知道它存在于列表的第一个元素中,我可以通过以下方式检索它:

mylist[1].value

但是,在我的情况下,我不知道列表中是否存在该对象,也不知道它在列表中的位置。

1 个答案:

答案 0 :(得分:1)

您需要遍历列表并查看每个对象。

如果您希望匹配一个匹配项,则可以将next与生成器表达式一起使用:

res = next((i.value for i in mylist if i.url == 'http://2'), None)

print(res)
# 2

如果您希望多次匹配,可以使用列表推导:

res = [i.value for i in mylist if i.url == 'http://2']

print(res)
# [2]