从元组列表中提取值(在本例中,只有列表中的一个元组)

2024-10-02 20:39:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python GAE工作。在

不明白为什么我不能用[index]从元组中提取值。从日志中,我可以看到我的leveloneAdd变量中确实有一个值,例如('english''subject')-但是当我循环使用我的元组1时,我的变量taghtype中的值是空的,而我期望的是tag = 'english'和{}。在

有人有什么想法吗?在

for each in leveloneAdd:
    tag = each[0]
    htype = each[1]
    q1 = Level_1_Headings.all().filter("name1 =",tag).filter("heading_type =",htype).get()

所以我按照Martijn的建议在日志中做了报告,下面是我的日志: 谢谢你的意见!我喜欢这个黑板——这是我的日志,使用了马蒂金的建议——我认为它像一根绳子一样解释了整个事情

^{pr2}$

看起来字符串被视为字符串?如何将其转换为真正的元组读取。这是我的原始代码,应该在这里创建元组(然后它转到客户端,然后返回到日志中显示的那样)

对于h1中的x: listone.append((str(x.name1),str(x.heading_type)))

上面的值是输入选择下拉框形式 然后从服务器端python-我通过
级别添加=(self.request.获取全部(“list_uno[]”)

抱歉,如果这些看起来是基本的问题,我是一个初学者,试图变得更好!!在


Tags: 字符串indexenglishtagtypefilter建议元组
3条回答

F.C.说的是真的。在

我有点被单一元素与元组的问题弄糊涂了。如果基本问题只是检测是否有简单值或元组作为leveloneAdd的元素,那么也许您应该考虑将listoneAdd作为一个元组列表,即使添加的是单个元素。这样,当您从列表中拉出一个元素时,您将始终知道您可以索引到它:

listoneAdd = [('one',), ('foot',), ('three', 'pigs')]
for element in listoneAdd:
    print "element is " + str(element)
    for i in range(0,len(element)):
        print "    do something with value " + element[i]`

屈服:

^{pr2}$

如果leveloneAdd == ('english', 'subject')那么它不是一个元组的列表,它只是一个元组,因此each在循环的每次迭代中都会以字符串作为值。在

如果leveloneAdd == [('english', 'subject')]是一个包含元组的列表,那么您的代码可以正常工作。在

如果可以的话,最好的选择是修复代码,这样leveloneAdd总是一个元组列表,如果不能这样做,那么当leveloneAdd是一个包含两个字符串的元组时,必须通过使leveloneAdd成为一个列表来修复它。小心,用所有的输入进行测试,因为在处理这种转换时很容易出错。在

docs中说get_all应该返回一个列表,也许它只在有多个参数时才返回列表。如果是这种情况,您可以将值转换为列表(如果它是字符串):

if isinstance(leveloneAdd, basestring):
    leveloneAdd = [leveloneAdd]

然后用','将leveloneAdd的值拆分

还要调整Javascript以避免使用诸如“(”和“'”等额外字符

试试这个:

for (tag, htype) in leveloneAdd:
    # stuff

如果不是元组,则会出现“太多值无法解包”错误。在


我看错了那篇文章

当我遇到这样的问题时,我通常会尝试以下方法:

^{pr2}$

然后你会得到调试器,你可以看到“东西”是不是你认为的那样。在


根据OP,“thing”不是tuple而是unicode字符串。要解决您的问题,请转换为字符串,然后拆分该字符串。代码如下:

thing = u'(a,b)'
[tag, htype] = str(thing).lstrip('(').rstrip(')').split(',')

这假设您总是期望一个包含两个条目的元组。在

相关问题 更多 >