迭代二维元组并分配内联(Python,iPython)

时间:2014-11-06 11:11:59

标签: sql loops for-loop tuples ipython

我有类似的东西(在我的iPython笔记本中,没有像numpy这样的特殊命名空间 - 我应该吗?):

map1 = (("A",1,2),("B",4,5),("C",0,0))

print len(map1)

for i in range(len(map1)):
    name = map1[i][0]
    ID = map1[i][1]
    parent_ID = map1[i][2]
    print name, ID, parent_ID
    statement= "INSERT INTO map VALUES (" + name + "," + `ID` + "," + `parent_ID` + ")"
    print statement

我正在寻求一种更优雅的方式来将单元组元素提取为oneliner或inliner。 (花了我很长时间才弄明白"`"做toString()转换)

1 个答案:

答案 0 :(得分:1)

Python可以多分配,并在循环中提取。

for name, item_id, parent_id in map1:
  print name, item_id, parent_id
  statement= "INSERT INTO map VALUES (" + name + "," + `item_id` + "," + `parent_id` + ")"
  print statement

如果你觉得琴弦部分缺乏优雅,有几种方法可以解决这个问题。首先 - 您始终可以使用str(item_id)来获取字符串。

您还可以使用字符串格式:

  statement= "INSERT INTO map VALUES (%s, %d, %d)" % (name, item_id, parent_id)

最后说明 - python约定建议使用变量名称的小写(如果打算将其用作const值,则使用大写)。小写的名称“id”是内置的 - 不要使用它,因此item_id

for name, item_id, parent_id in map1:
  print name, item_id, parent_id
  statement= "INSERT INTO map VALUES (%s, %d, %d)" % (name, item_id, parent_id)
  print statement

你甚至可以更进一步,使用列表理解来完成所有这一切:

statements = ["INSERT INTO map VALUES (%s, %d, %d)" % (name, item_id, parent_id) for name, item_id, parent_id in map1]

您现在可以打印这些语句的数组,或者在其他地方使用。