Python 是否有方法返回/打印不带引号或括号的列表项?
抱歉,如果这已经在某处提到(我找不到) 我基本上想从列表中列出一个项目,但它包括引号和括号(我不想要)。 以下是我的数据:Python 是否有方法返回/打印不带引号或括号的列表项?,python,Python,抱歉,如果这已经在某处提到(我找不到) 我基本上想从列表中列出一个项目,但它包括引号和括号(我不想要)。 以下是我的数据: inputData = {'red':3, 'blue':1, 'green':2, 'organge':5} 这是我的类,可以根据键或值查找项 class Lookup(dict): """ a dictionary which can lookup value by key, or keys by value """ def __ini
inputData = {'red':3, 'blue':1, 'green':2, 'organge':5}
这是我的类,可以根据键或值查找项
class Lookup(dict):
"""
a dictionary which can lookup value by key, or keys by value
"""
def __init__(self, items=[]):
"""items can be a list of pair_lists or a dictionary"""
dict.__init__(self, items)
def get_key(self, value):
"""find the key(s) as a list given a value"""
return [item[0] for item in self.items() if item[1] == value]
def get_value(self, key):
"""find the value given a key"""
return self[key]
除了支架外,它工作正常
print Lookup().get_key(2) # ['blue'] but I want it to just output blue
我知道我可以通过替换方括号/引号(LookupVariable.replace(“,”)
)来实现这一点,但我想知道是否有更类似python的方法来实现这一点
谢谢。您正在打印返回的列表值,Python使用括号和引号对其进行格式化。要仅打印列表中的第一个元素,请执行以下操作:
print Lookup.get_key(2)[0]
要打印列表中以逗号分隔的元素,请执行以下操作:
print ", ".join(str(x) for x in Lookup.get_key(2))
或
改变
return [item[0] for item in self.items() if item[1] == value]
到
现在您正在返回列表理解的结果--alist
。相反,您希望返回由等效生成器表达式返回的第一项,next
就是这样做的
编辑:如果您确实想要多个项目,请使用Greg的答案——但在我看来,您似乎只想获得一个键——这是一个很好的方法
如果您希望它在该值不存在时引发StopIteration
错误,请保持如上所述。如果希望它返回其他内容(如None
),请执行以下操作:
我认为这样做的想法是,
get_key()
可以合法地返回多个项目。@Greg听起来好像他只想要一个键<代码>打印查找。get_key(10)[0](假设他指的是查找的实例,而不是类)将给出索引器,而使用next
可以在内部处理“无结果”的情况。谢谢,这也起到了作用。为了学习的兴趣,我可以澄清一下吗?我理解格雷格的回答,但您是否在其中添加了“下一步”,因为它首先返回整个列表(即使该列表中只有一个项目),并且我们正在使用“下一步”命令移动到“下一步”,以便仅查看列表中的下一项?比如,如果列表中有两个结果,我可以继续使用“下一步”查看列表中的其他项目?@Lostsoul这会起作用,但是这个版本只返回第一个项目,如果您想要整个列表,那么只需返回它并加入它或在for
循环中对其进行迭代,Python会自动在内部调用next
来进行迭代——如果你想要整个过程,没有理由自己调用它。我现在就知道了。谢谢agf。你昨天也帮了我,也谢谢你。天哪,非常感谢。我没有意识到它只是打印一个列表,我可以选择项目。我对python有点陌生(并且比list/dicts更新),所以我认为这正是python打印它们的方式。非常感谢格雷格(还有..你照片中的发型太棒了)。
return [item[0] for item in self.items() if item[1] == value]
return next(item[0] for item in self.items() if item[1] == value)
return next((item[0] for item in self.items() if item[1] == value), None)